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과 비슷해 보여 헷갈릴 수 있다.
'그 외 ... (정리해야함) > 꿀팁' 카테고리의 다른 글
[Gradle] build.gradle 파일을 다른 이름으로 지정하는 방법 (0) | 2021.04.07 |
---|---|
맥북(Mac)에서 기본 브라우저 변경법 (0) | 2021.03.30 |
Java stream 요소 존재여부 확인 (0) | 2021.01.21 |
[Intellij] ClassDiagram(UML) 보기 (0) | 2020.07.24 |
인증서 해쉬와 디지털 서명(Hash and Digital Signing) (0) | 2020.03.10 |