[python] python 비동기: OS 관점에서 동기/비동기와blocking/non-blocking 이해하기

정재혁·2024년 10월 19일
0
post-thumbnail

이 글은 IBM의 Boost application performance using asynchronous I/O라는 아티클을 바탕으로 OS 관점에서의 동기/비동기 blocking/non-blocking을 설명하고 있습니다

요약

  • 동기/비동기: 작업의 완료 여부에 맞춰서, 작업을 순차적으로 진행하면 동기 하지 않으면 비동기
  • blocking/non-blocking: 현재 작업이 block 되어 다른 작업을 수행할 수 없으면 blocking, block 되지 않아 다른 작업을 수행할 수 있으면 non-blocking

blocking과 non-blcoking


figure 2synchronous blocking 방식이다.
system call을 하고 난 후, 작업을 실행할 권한이 없다. block 당한 것이다.

그 아래의 이미지는 synchronous non-blocking 방식이다
Synchronous blocking은 아래와 같이 작동한다

  1. application이 read 시스템콜을 수행한다.
  2. 커널이 application에게 즉시 -1과 EAGAIN 또는 EWOULDBLOCK이라는 에러 코드를 응답한다.
  3. 작업을 실행할 권한이 주어졌으므로, 작업을 진행한다.
  4. application은 I/O 작업의 결과를 확인하기 위해 다시 read 시스템콜을 수행한다.
  5. I/O 작업의 결과가 application으로 이동된 후, application은 다시 작업을 수행한다

non-blocking은 system call을 하고 난 후, 작업을 실행할 권한이 있다.

synchronous와 asynchronous


figure 5asynchronous non-blocking 방식이다.
순차적으로 작업을 진행하지 않고, system call을 보내고 난 후에도 작업을 할 권한이 있다

그 아래의 이미지는 synchronous non-blocking 방식이다
non-blocking은 system call을 하고 난 후, 작업을 실행할 권한이 있다.
그러나 synchronous 이므로 system call을 하고 난 후, 그 응답값이 오고나서 다시 순차적으로 작업을 진행하고 있다.

참고자료

IBM Developer: Boost application performance using asynchronous I/O

profile
궁금한 것을 궁금한 것으로 두지 말자.
post-custom-banner

0개의 댓글