본문 바로가기

Python/고급

[Python] Blocking vs Non-Blocking, Sync vs Async

Blocking vs Non-blocking

    Blocking
    - 시스템 콜 요청시 -> 커널 IO 작업 완료 시 까지 응답 대기
    - 제어권(IO작업) ->  커널 소유 -> 응답(Response)전 까지 대기(Block) -> 다른 작업 수행 불가(대기)

    Non-blocking
    - 시스템 콜 요청시 -> 커널 IO 작업 완료 여부 상관없이 즉시 응답
    - 제어권(IO작업) ->  유저 프로세스 전달 -> 다른 작업 수행 가능(지속) -> 주기적 시스템 콜 통해서 IO 작업 완료 여부 확인


Async vs Sync

    Sync : IO 작업 완료 여부에 대한 Noty는 유저프로세스(호출하는 함수) -> 커널(호출되는 함수)
    Async : IO 작업 완료 여부에 대한 Noty는 커널(호출되는 함수) -> 유저프로세스(호출하는 함수)

 

간단한 상황극

 

동기/비동기 - 완료여부에 대한 책임이 누구에게 있는가, 
            동기(일시키는 팀장이 책임), 비동기(완료시 일하는 사원이 보고 책임).
블로킹/논블로킹 - 일하는 사원이 바로 응답하는지 여부, 
            블로킹(완료될때까지 사원이 응답하지 않음 그래서 팀장이 다른일을 하지 못하고 기다림), 
            논블로킹(사원이 바로 응답 그래서 팀장이 자기일을 할수 있음, 완료여부는 중요하지 않음)

1. 비동기(완료시 사원이 보고)/논블로킹(팀장업무를 동시 진행함)
개발팀장이 사원1에게 업무A를, 사원2에게 업무B를, 사원3에게 업무C를 지시하였다. (논블로킹)
(그리고 바쁜 개발팀장은 개발팀 업무 이외에도 다른 업무를 보기 시작한다.)
사원들은 각자 본인의 맡은 작업을 끝내는대로 개발팀장에게 보고한다. (비동기)

2. 동기(완료여부 팀장님이 확인)/논블로킹(팀장업무를 동시 진행함)
개발팀장이 사원1에게 업무A를 지시한다.
개발팀장은 사원1이 업무A를 끝맞칠때 까지 사원1 모니터 뒤에서 기다린며 본인일을 병행
(팀장업무를 하면서 완료여부 사원에게 계속 물어봄)
... 이후 생략 ...

3. 비동기(완료시 사원이 보고) + 블로킹(팀장일을 못하고 기다림)
- 가장 애매한 상황, 필요한 실제 상황을 잘 모르겠음.
블로킹이라 사원이 완려여부를 응답하지 않아서 탐장일을 못하고 기다리고, 비동기라 완료시 사원이 보고함.
개발팀장이 사원1에게 업무A를 지시하고, 사원2에게 업무B를 지시하고 싶었지만... (블로킹이라서)
사원1이 개발팀장을 붙잡는다. (블로킹 방식의 작업처리, 비동기이므로 사원이 완료여부 응답할때 까지 기다림)

4. 동기(완료여부를 팀장님이 확인)/블로킹(사원이 응답을 안해서 팀장일을 못하고 기다림)
개발팀장이 사원1에게 업무A를 지시한다.
개발팀장은 사원1이 업무A를 끝맞칠때 까지 사원1 모니터 뒤에서 기다린다.. .. 끝날 때 까지.. (블로킹이라서)
사원1이 업무A를 끝내면 개발팀장이 확인한다(동기식이라 팀장이 완료여부를 확인해야 한다).
그리고 사원2, 사원3에게 지시한다.



 

참고 사이트
https://www.inflearn.com/course/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%99%84%EC%84%B1-%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%98%A4%EB%A6%AC%EC%A7%80%EB%84%90/lecture/68537?tab=curriculum
https://limdongjin.github.io/concepts/blocking-non-blocking-io.html#%E1%84%90%E1%85%B3%E1%86%A8%E1%84%8C%E1%85%A5%E1%86%BC-%E1%84%87%E1%85%B3%E1%86%AF%E1%84%85%E1%85%A9%E1%84%80%E1%85%B3-%E1%84%8C%E1%85%A1%E1%84%85%E1%85%AD%E1%84%8B%E1%85%A6-%E1%84%84%E1%85%A1%E1%84%85%E1%85%B3%E1%86%AB-%E1%84%87%E1%85%AE%E1%86%AB%E1%84%85%E1%85%B2
https://siyoon210.tistory.com/147