비동기 I/O

비동기 I/O (Asynchronous I/O)

Fortran 프로그램에서 파일을 읽고 쓸 때, 코드는 그 I/O가 끝날 때까지 기다렸다가 다음 줄로 넘어가는 게 기본이에요. 하지만 기다리지 않고 다른 작업을 이어서 하고 싶을 때가 있죠. gfortran이 비동기 I/O를 어떤 조건에서 지원하는지 짚어볼게요.

출처: gfortran 문서 — Asynchronous I/O

본문

지원 조건

비동기 I/O는 프로그램이 POSIX 스레드 라이브러리와 연결(link)되어 있을 때만 지원돼요. 그렇지 않으면 모든 I/O가 동기(synchronous)로 수행돼요.

또한 pthread 조건 변수(condition variable)를 지원하지 않는 시스템, 예를 들어 AIX에서는 I/O도 동기식으로 수행돼요.

연결 방법

Darwin이나 Solaris 같은 일부 시스템은 POSIX 스레드 라이브러리가 항상 연결되기 때문에 비동기 I/O가 항상 수행돼요. 반면 Linux 같은 시스템은 링크 단계에서 -pthread, -lpthread, 또는 -fopenmp 를 지정해 줘야 비동기 I/O가 활성화돼요.

즉, 비동기 I/O를 쓰려면 그냥 코드에서 asynchronous 속성을 지정하는 것만으로는 부족하고, 컴파일·링크 시점에 스레드 라이브러리를 함께 엮어야 한다는 점을 기억하면 돼요.

확인 필요

이 페이지는 컴파일러 특성(Compiler Characteristics) 자료의 일부로, 비동기 I/O를 문법적으로 어떻게 쓰는지는 다루지 않아요. 실제 사용 문법은 Fortran 표준의 asynchronous 지정자와 wait 문을 참고하면 돼요.