TIL. 161동기(Sync), 비동기(Async), 블로킹(Blocking), 논블로킹(Non-Blocking)

조윤식·2022년 9월 19일
0

Blocking/Non-Blocking

블로킹/논블로킹은 호출되는 함수가 바로 리턴이 되는지 안되는지에 대한 관점이다.호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고, 호출한 함수가 다른 일을 할 수 있는 기회를 준 다면 NonBlocking호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 대기한다면 Blocking

Synchronus/Asynchronous

동기/비동기는 호출되는 함수의 작업 완료 여부를 누가 신경쓰느냐에 대한 관점이다.호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면 호출되는 함수가 전달받은 callback을 실행하고, 호출하는 함수의 작업 완료 여부를 신경쓰지 않는다면 Asynchronus호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나, 또는 호출되는 함수로부터 바로 리턴 받더라도 작업 완료 여부를 호출하는 함수 스스로 계속 확인하며 신경을 쓰면 Synchronus

동기-Blocking, 비동기-NonBlocking

우리에게 익숙하다. 비동기-NonBlocking은 Ajax를 생각하면 된다.

동기-NonBlocking

동기-논블로킹
Non-Blocking 이기 때문에, 호출되는 함수는 바로 리턴된다. 호출하는 함수는 작업의 완료를 계속하여 신경쓴다.작업의 완료를 신경쓰는 방법은 2가지가 있다.

  • 기다리기
  • 완료가 되었는지 지속적으로 호출하기

위의 그림은 완료가 되었는지 호출하는 방식이다.Non-Blocking은 메서드 호출 후 바로 반환값을 받아 다른 작업을 수행할 수 있지만, 호출에 의해 작업이 완료된 것이 아니기 때문에 호출하는 메서드가 호출된 메서드에게 지속적으로 작업 완료 여부를 묻는다.

비동기-Blocking

Blocking - 호출되는 함수가 바로 리턴되지 않음Asyncronous - 호출하는 함수는 작업 완료 여부를 신경쓰지 않음동기-Blocking과 비슷해 보여 헷갈릴 수 있다.

출처: https://cornswrold.tistory.com/507?category=755365 [평범한개발자노트:티스토리]

profile
Slow and steady wins the race

0개의 댓글