Synchronous Blocking

Blocking / Synchronous 개념


위 블로그에 굉장히 친절하게 Asynchronous와 Non-Blocking에 대해 설명이 되어있다.



image_thumb4

IBM DeveloperWorks의 2x2 Matrix



image_thumb6

Sysnchronous, Blocking 비슷하다. 직관적으로 비슷한것끼리 묶어놓으니 뭔지 이해된다.
아래 예시가 있다.

image
image
문제는 비슷하다고 느껴지지 않는 것끼리 묶였을 때이다…

핵심!!
관심사가 다르다!! 
image_thumb10

Blocking/NonBlocking

Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사다.

호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고,

호출한 함수가 다른 일을 할 수 있는 기회를 줄 수 있으면 NonBlocking이다.

그렇지 않고 호출된 함수가 자신의 작업을 모두 마칠 때까지

호출한 함수에게 제어권을 넘겨주지 않고 대기하게 만든다면 Blocking이다.




Synchronous/Asynchronous

Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사다.

호출되는 함수에게 callback을 전달해서, 호출되는 함수의 작업이 완료되면

호출되는 함수가 전달받은 callback을 실행하고,

호출하는 함수는 작업 완료 여부를 신경쓰지 않으면 Asynchronous다.

호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나,

또는 호출되는 함수로부터 바로 리턴 받더라도 작업 완료 여부를

호출하는 함수 스스로 계속 확인하며 신경쓰면 Synchronous다.




처음 이 글을 읽었을 때 이해가 될 듯 말듯 했지만 곱씹으며 이해 완료!!




NonBlocking-Sync


즉, NonBlocking 메서드 호출 후 바로 반환 받아서 다른 작업을 할 수 있게 되지만,
메서드 호출에 의해 수행되는 작업이 완료된 것은 아니며,
호출하는 메서드가 호출되는 메서드 쪽에 작업 완료 여부를 계속 문의한다.

image_thumb12
image


Blocking-Async

호출되는 함수가 바로 리턴하지 않고, 호출하는 함수는 작업 완료 여부를 신경쓰지 않는 것이다.



image_thumb14
image



출처
http://djkeh.github.io/articles/Boost-application-performance-using-asynchronous-IO-kor/
http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/













































Share:

0 개의 댓글:

댓글 쓰기