눈송이의 개발생활
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous) 본문
Computer Science/Operating System
[운영체제]블로킹(Blocking)/논블로킹(Non-Blocking) & 동기(Synchronous)/비동기(Asynchronous)
꾸지새미언니🗝️ 개념 및 키워드
제어권: 코드 실행 권리. 제어권을 가지면 코드를 실행한 후 자신을 호출한 함수에게 돌려줌결과값 기다리는 것: A함수가 B함수를 호출했을 때, B의 결과를 기다리는지의 여부Blocking: 자신의 작업을 하다가 다른 주체가 작업을 시작하면 끝났때까지 기다렸다가 다시 자신의 작업 시작하는 것Non-Blocking: 다른 주체의 작업에 관련없이 작업을 수행하는 것Synchronous: 작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에 시작Asynchronous: 시작, 종료가 일치하지 않으며, 끝나는 동시에 시작을 하지 않음
블로킹(Blocking) / 논블로킹(Non-Blocking)
제어권에 대한 것- 프로세스의 유휴 상태에 대한 개념
- 처리되어야 하는 하나의 작업이
전체적인 작업의 흐름을 막느냐 안막느냐에 대한 관점 - A가 B함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 블로킹/논블로킹 나눠짐
블로킹(Blocking)
🚩
- A 함수가 B 함수를 호출하면 제어권을 B에 넘겨줌
- A는 제어권이 없기 때문에 B가 실행될 동안 멈춤
- B가 실행이 끝나면 제어권을 A에게 돌려줌
논블로킹(Non-Blocking)
🚩
- A가 B를 호출하면 B는 실행되지만 제어권은 계속 A가 갖고 있음
- A는 B를 호출한 이후에도 계속 자신의 코드 실행
- A와 B 모두 함수 실행
동기(Synchronous) / 비동기(Asynchronous)
시간에 대한 것- 프로세스의 수행 순서 보장에 대한 매커니즘
- 처리해야 할 작업들을
어떤 흐름으로 처리할 것인지에 대한 관점 - 호출되는 함수의 작업 완료 여부를 신경쓰느냐에 따라, 함수 실행/리턴 순차적인 흐름을 따르느냐에 따라 동기/비동기로 나눠짐
동기(Synchronous)
🚩
- 요청과 그 결과가 동시에 일어남(요청자 입장에서)
- 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 결과가 주어져야 함
- 결과가 미완료 상태면 작업 완료 여부를 스스로 계속 확인하고 신경 씀
- A 노드와 B 노드 사이의 작업 처리 단위(transaction)을 동시에 맞춤
- 같은 일을 동시에 진행 (ex. A에서는 돈 빠지고 B에는 돈 들어오는 행위 → 계좌이체)
장점 | 단점 |
설계가 매우 간단하고 직관적 | 결과가 주어질 때까지 대기해야 함 |
비동기(Asynchronous)
🚩
- 요청과 결과가 동시에 일어나지 않음(요청자 입장에서)
- A가 B를 호출한 수 B의 작업 완료 여부에는 신경쓰지 않음
- A가 B를 호출할 때 콜백 함수 함께 전달
- B 작업 끝나면 콜백 함수 실행 (결과 스스로 요청자에게 알려줌)
- 노드 사이의 작업 처리 단위(transaction)을 동시에 맞추지 않음
- 노드의 행위(목적)이 다른 경우 → 작업 처리 시간이 일치하지 않아도 되기 때문에 비동기
장점 | 단점 |
결과가 주어지는데 시간이 걸려도 그동안 다른 작업을 할 수 있어서 효율적 | 동기보다 복잡 |
블로킹, 논블로킹, 동기, 비동기 조합
Sync-Blocking
1️⃣
- A는 B의 리턴값 필요 (동기)
- 제어권을 B에 넘김
- B 완료되서 제어권과 결과값 기다릴 때까지 대기 (블로킹)
💡 요청받은 함수의 작업이 끝나야 제어권 돌려 받음(블로킹) + 요청자는 계속 결과 확인(동기)
Sync-Nonblocking
2️⃣
- A가 B를 호출하고 제어권을 주지 않고 자신의 코드 실행 (논블로킹)
- A는 B의 리턴값이 필요하기 때문에 중간중간 B의 진행상황을 물어봄 (동기)
💡 제어권 바로 돌려줌(논블로킹) + 요청자는 계속 결과 확인(동기)
Async-Nonblocking
3️⃣
- A는 B는 호출하고 제어권을 계속 갖고 있음 (논블로킹)
- B를 호출하면서 콜백 함수를 함께 전달
- B는 실행이 끝나면 콜백함수를 실행 (비동기)
💡 제어권 바로 돌려줌(논블로킹) + 결과는 요청받은 함수가 알아서 알려줌(비동기)
Async-Blocking
4️⃣
- 잘 없는 경우
- A는 B의 리턴값을 생각하지 않고 콜백함수 보냄 (비동기)
- 관심이 없는데도 제어권 전달 (블로킹)
- A는 관련없는 B의 작업이 끝날때까지 기다렸다가 제어권을 받아서 다시 실행해야함
참조
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
https://steady-coding.tistory.com/531
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제]프로세스 사이 통신 - IPC(Inter Process Communication) (0) | 2023.02.27 |
---|---|
[운영체제]PCB와 문맥 교환(Context Switching) (0) | 2023.02.27 |
[운영체제]인터럽트(Interrupt)와 시스템 콜(System Call) (0) | 2023.02.23 |
[운영체제]프로세스 메모리 구조 (0) | 2023.02.21 |
[운영체제]프로세스(Process)와 스레드(Thread) (0) | 2023.02.20 |
Comments