동기(Synchronous) & 비동기(Asynchronous)
동기와 비동기는 작업 순서에 관점을 둔다.
동기(Synchronous)는 작업 완료 여부에 따라 순차적으로 처리하는 것을 말한다. 프로세스 처리 순서가 A > B > A라고 했을 때 A가 완료된 후 B가 실행되고, B가 완료된 후 A가 순차적으로 처리된다.즉 작업의 순서가 보장되어야 한다. (동시성 - Concurrency)
비동기(Asynchronous)는 작업 완료 여부가 새로운 작업을 실행하는데 영향을 미치지 않는다. 프로세스가 A, B, C순서대로 시작한다고 해도 프로세스가 종료되는 순서는 A, B, C순서대로 종료된다는것을 보장하지 못한다. 즉 작업의 순서가 보장되지 않는다. (병렬성-Parallelism)
블로킹(Blocking) & 논 블로킹(Non-Blocking)
블로킹과 논블로킹은 단어 그대로 Block, 제어권에 관점을 둔다. 즉 결과를 기다리는 대상을 어떻게 다룰것인지에 관점이 있다.
블로킹(Blocking)은 말 그대로 Block. 내 작업이 끝나기 전까지 제어권을 돌려주지 않는 것이다. 나한테 작업을 요청한 사람은 내 작업의 결과가 나올 때 까지 나만 바라본다. 이때 나한테 작업을 요청한 프로세스는 Wait상태에 빠진다.
논블로킹(Non-Blocking)은 나한테 작업을 요청한 즉시 내 작업이 끝나지 않아도 나를 호출한 함수에게 제어권을 넘겨주는 것이다.
동기/비동기 + 블로킹/논블로킹 조합
1. Blocking + Synchronous
- 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고(Blocking) 다른 작업의 완료 여부를 바로 받아 순차적으로 처리(Sync)하는 방식
동작 예시
팀장 : 사원1씨 업무 A 좀 해주세요
사원1 : 네 알겠습니다. (A를 처리중)
팀장 : (사원1이 A를 다할때까지 아무일도 하지 않고 기다린다)
사원1 : 팀장님 A 업무 완료했습니다.
팀장 : 수고했어요. 사원2씨 업무 B좀 해주세요.
사원2 : 네 알겠습니다. (B를 처리중)
팀장 : (사원2가 B를 다할때까지 아무일도 하지 않고 기다린다)
사원2 : 팀장님 B 업무 완료했습니다.
팀장 : 수고했어요. 사원3씨 업무 C좀 해주세요.
2. Non-Blocking + Synchronous
- 다른 작업이 진행되는 동안 자신의 작업을 처리하고 (Non-Blocking) 다른 작업의 결과를 바로바로 처리하여 작업을 순서대로 처리(Sync)방식
동작 예시
팀장 : 사원1씨 업무 A 좀 해주세요
사원1 : 네 알겠습니다. (A를 처리중)
팀장 : 다음 업무 B를 하려면 A가 완료되야 하는데.. 사원1씨 다했어요?
사원1 : 아직이요 A 처리중입니다
팀장 : 사원1씨 다했어요?
사원1 : 아직이요 A 처리중입니다
사원1 : 팀장님 A 모두 완료했습니다
팀장 : 수고했어요. 사원2씨 업무 B좀 해주세요.
사원2 : 네 알겠습니다. (B를 처리중)
팀장 : 다음 업무 C를 하려면 B가 완료되야 하는데.. 사원2씨 다했어요?
3. Non-Blocking + Asynchronous
- 다른 작업이 진행되는 동안 자신의 작업을 처리하고(Non-Blocking) 다른 작업의 결과를 바로 처리하지 않아 작업 완료 순서가 보장되지 않는(Async) 방식
동작 예시
팀장 : 사원1씨 A업무좀 해주세요. (동시에 지시)
팀장 : 사원2씨 B업무좀 해주세요. (동시에 지시)
팀장 : 사원3씨 C업무좀 해주세요. (동시에 지시)
팀장 : 다른일을 해야지 ~
사원2 : 팀장인 B 모두 처리했습니다. (업무량에 따라 각 사원마다 완료하는 시간이 제각기 다를 수 있다)
사원1 : 팀장인 A 모두 처리했습니다.
사원3 : 팀장인 C 모두 처리했습니다.
4. Blocking + Asynchronous
- 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리다가(Blocking), 다른 작업의 결과를 바로 처리하지 않아 작업 완료 순서가 보장되지 않는(Async)방식
정리
요청에 대한 응답 순서가 동일하면 Sync, 순서가 다르면 Async
요청을 받읃 쪽에서 처리 완료 후 return해주면 Blocking, 처리가 끝나기도 전에 리턴해주면 Non-blocking
참고자료
CS 지식을 공부하고 기록하는 개인 공부 블로그입니다.
내용 중 틀린 부분 피드백 혹은 궁금한 점이 있으면 댓글로 남겨주시면 참고 및 답변 달아드리겠습니다🧐
'Computer Science > 운영체제' 카테고리의 다른 글
[OS/운영체제] Implicit Threading / 암묵적 스레딩이란? (0) | 2023.12.31 |
---|---|
[OS/운영체제] Thread / 스레드 (1) | 2023.12.22 |
[OS/운영체제] IPC / Inter Process Communication (1) | 2023.12.18 |
[운영체제] Memory layout (0) | 2023.12.14 |
[OS/운영체제] 프로세스 / Process (0) | 2023.12.13 |