반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 리눅스
- k8s
- NGINX
- 인프라
- AWS
- 쿠버네티스
- kubernetes
- C++
- Swift
- 도커 이미지
- 부스트코스
- os
- devops
- 도커 컨테이너
- 도커
- ios
- centOS
- swift 클로저
- linux
- 데브옵스
- centOS7
- boj
- Python
- 네트워크
- 컨테이너
- 프로세스
- docker
- 클라우드
- 도커 명령어
- 운영체제
Archives
- Today
- Total
귀염둥이의 메모
Blocking vs NonBlocking, Synchronous vs Asynchronous 본문
반응형
Blocking
- 자신의 작업을 진행하다 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
- 직접 제어할 수 없는 대상의 작업이 끝날 때까지 제어권을 넘겨주지 않는 것
- ex) 호출하는 함수가 IO 요청을 했을 때 IO 처리가 완료될 때까지 아무 일도 하지 못한고 기다리는 것
Non-Blocking
- 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것
- 직접 제어할 수 없는 대상의 작업 처리 여부와 상관이 없음
- ex) 호출하는 함수가 IO 요청을 한 후 IO 처리 완료 여부와 상관없이 바로 자신의 작업을 하는 것
Blocking vs Non-Blocking
- 다른 주체가 작업할 때 자신의 제어권이 있는지 없는지로 볼 수 있음
- 제어의 관점에서 바라보는 것
Synchronous
작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작함을 의미
- A와 B가 시작 시간 또는 종료 시간이 일치하면 Sync
- ex) A, B 쓰레드가 동시에 작업을 시작하는 경우
- A가 끝나는 시간과 B가 시작하는 시간이 일치하면 Sync
Asynchronous
시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음을 의미
- Sync와 반대로 대상이 서로 시간을 맞추지 않는 것을 말한다
- 함수A가 호출되는 함수 B에게 작업을 맡겨놓고 완료 여부(결과)를 신경을 쓰지 않는 것
Synchronous vs Asynchronous
- 결과를 돌려주었을 때 순서와 결과에 관심이 있는지 아닌지로 판단할 수 있음
- 순서와 결과 처리의 관점
Sync/Async와 Blockking/Non-Blocking은 비슷하지만 다른 관점을 갖고 서로 독립적으로 생각해야 한다
2:2 Matrix
Blocking/Sync
- 결과를 기다리고, 끝나면 바로 처리
- 제어권이 넘어가고, 작업이 완료될 때까지 기다린다 - Blocking
- 제어권과 결과를 같이 받아서 처리 - Sync
Non-Blocking/Sync
- 애플리케이션으로부터 요청을 받은 커널은 작업 완료 여부와 상관없이 제어권을 반환하여 애플리케이션에 넘겨준다
- 중간중간마다 커널에게 결과가 나왔는지 계속 물어본다 => 안 나왔으면 다시 자신의 일을 한다 => 다시 물어본다...
- 결과 완료되면 그 결과를 처리함
Blocking/Async
- 자신의 작업에 대한 제어권이 없고, 결과를 신경 쓰지 않음
- 어차피 Blocking 되어 대기하는데 Blocking/Sync 방식과 성능 차이가 있을까...?
- Blocking/Async는 별로 좋은 점이 없어서 이 방식을 사용할 필요가 없긴 하다
- 의도하지 않게 Blocking/Async로 동작하는 경우가 있다고 한다
대표적인 케이스가 Node.js와 MySQL의 조합이 있다. Node.js 쪽에서 callback 지옥을 헤치면서 Async로 전진해와도, 결국 DB 작업 호출 시에는 MySQL에서 제공하는 드라이버를 호출하는데, 이 드라이버가 Blocking 방식이라고 한다.
NonBlocking/Async 방식을 쓰는데, 그 과정에 Blocking으로 동작하는 것이 포함되어 의도치 않게 Blocking/Async로 동작할 수 있다.
Non-Blocking/Async
- 다른 작업이 시작되어도 자신의 작업은 멈추지 않음, 결과를 바로 처리하지 않아도 됨
- ex) JavaScript에서 API 요청을 하고, 다른 작업을 하다가 callback을 통해서 추가적인 작업을 처리할 때
<참고자료>
https://www.youtube.com/watch?v=oEIoqGd-Sns
http://homoefficio.github.io/2017/02/19/Blocking-NonBlocking-Synchronous-Asynchronous/
https://velog.io/@codemcd/Sync-VS-Async-Blocking-VS-Non-Blocking-sak6d01fhx
반응형
Comments