본문 바로가기
💻 Operating System

Blocking,Non-blocking & Synchronous,Asynchronous

by iirin 2023. 2. 20.
동기와 블록킹, 비동기와 논블록킹의 작동 매커니즘이 더 직관적이기 때문에 많은 사람들이 이 개념들을 같은 것 혹은 비슷한 것으로 오해하고 있는데, 방금 이야기 했듯이 이 두가지 개념은 서로 전혀 다른 곳에 초점을 맞춘 개념들이므로 서로 직접적인 관련은 거의 없다고 봐도 된다. 단지 조합하여 사용되는 것 뿐이다. 출처

동기와 비동기 Synchronous, Asynchronous

  • 호출되는 함수의 작업 완료 여부를 누가 신경쓰는가에 따라 다르다.
  • 동기/비동기는 작업을 수행하는 주체가 두 개 이상이어야 한다. 이 때 작업의 시간(시작, 종료 등)을 서로 맞춘다면 이를 동기라고 부르고, 서로 작업의 시간이 관계없다면 이를 비동기라고 부른다.

동기 Synchronous

  • 호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나, 또는 호출되는 함수로부터 바로 리턴 받더라도 작업 완료 여부를 호출하는 함수 스스로 계속 확인하며 신경쓰는 것.

비동기 Asynchronous

  • 호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면 호출되는 함수가 전달받은 callback을 실행하고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않는 것.
  • 시스템콜이 즉시 리턴될 때 데이터와 함께 오지 않는다.

블로킹과 논블로킹

  • 호출된 함수가 바로 리턴하느냐 마느냐
  • 메서드를 사용하는 클라이언트의 입장에 대한 것이다.
  • 블로킹/논블로킹은 작업의 대상이 2개 이상이어야 합니다. 

블로킹 Blocking

  • A 함수가 B 함수를 호출 할 때, B 함수가 자신의 작업이 종료되기 전까지 A함수를 대기시키고 A 함수에게 제어권을 돌려주지 않는다.
  • 대기 큐에 들어간다면
  • 리턴은 시스템 콜이 완료된 후에 온다.

논블로킹 Non-Blocking

  • A 함수가 B 함수를 호출 할 때, B 함수가 제어권을 바로 A 함수에게 넘겨주면서, A 함수가 다른 일을 할 수 있도록 한다.
  • 대기 큐에 들어가지 않는다.
  • 완료되지 않아도 빠르게 돌아온다.
  • 시스템콜이 즉시 리턴될 때 데이터와 함께 온다.


ref.