본문 바로가기
CS/Operating System

Blocking vs Non-Blocking & Sync vs Async

by jeounpar 2023. 3. 24.

Blocking, Non-Blocking 과 Sync, Async 의 차이점은 '관점'을 어디에 두느냐 이다.

Blocking, Non-Blocking은 제어의 관점

Sync, Async 은 결과의 관점

 

Blocking

  • A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A 함수에게 제어권을 돌려주지 않는 것

Non-blocking

  • A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것.

Synchronous

  • A 함수가 B 함수를 호출 할 때, B 함수의 결과를 A 함수가 처리하는 것.

Asynchronous

  • A 함수가 B 함수를 호출 할 때, B 함수의 결과를 B 함수가 처리하는 것.

출처 :  https://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/

Sync - Blocking

  • file.read(), file.write()

Async - Non Blocking

  • asyncFileChannel.read, asyncFileChannel.write, node.js

Sync - Non Blocking

Future ft = asyncFileChannel.read(~~~);

while(!ft.isDone()) {
    // isDone()은 asyncChannle.read() 작업이 완료되지 않았다면 false를 바로 리턴해준다.
    // isDone()은 물어보면 대답을 해줄 뿐 작업 완료를 스스로 신경쓰지 않고,
    //     isDone()을 호출하는 쪽에서 계속 isDone()을 호출하면서 작업 완료를 신경쓴다.
    // asyncChannle.read()이 완료되지 않아도 여기에서 다른 작업 수행 가능 
}

// 작업이 완료되면 작업 결과에 따른 다른 작업 처리

Async - Blocking

원래는 NonBlocking-Async를 의도로 개발을 했으나 실제로는 Blocking-Async가 되어버리는 경우

ex) node.js + mysql

node.js에서 async를 사용해도 mysql 드라이버 자체는 blocking 방식

'CS > Operating System' 카테고리의 다른 글

메모리 구조  (0) 2023.04.03
운영체제와 인터럽트  (0) 2023.04.03
Race Condition  (0) 2023.03.24
프로세스 vs 스레드, 멀티프로세스 vs 멀티스레드  (0) 2023.03.24