2024. 9. 10. 13:30ㆍOperatingSystem
Synchronous 방식
Synchronous 방식은 스레드가 어떤 함수 작업을 수행할 때 함수 작업 안에 다른 여러가지 작은 작업들을 전체적인 관점에서 순차적으로 완료하는 방식입니다. 예를 들어 다음 그림과 같이 스레드#1 가 함수를 호출 시 함수 안에는 A,B,C I/O 작업이 존재합니다. 스레드#1이 실행하는 함수가 Synchronous 방식으로 작동한다면 전체적으로 볼때 작업들은 순차적으로 완료되어 A -> B -> C 작업 순으로 완료될 것입니다.
다음 그림에서 A, C I/O 작업은 블로킹(Blocking) 방식이기 때문에 A, C 작업을 호출한 스레드는 작업이 완료될 때까지 대기하는 것을 볼수 있습니다. 반면에 B 작업은 논블로킹(Non-Blocking) 방식이기 때문에 B 작업이 끝날때까지 대기하지 않고 다음 작업들을 계속 진행합니다. 하지만 여기서 주목할 점은 스레드#1이 함수를 진행하는 방식이 Synchronous 방식이기 때문에 C 작업을 시작하기 전에 계속 B 작업이 완료 되었는지 요청하는 것을 볼수 있습니다. 왜냐하면 Synchronous 방식은 각각의 작업을 순차적으로 완료해야 하기 때문입니다.
Synchronous 방식의 장단점
장점
- 코드가 전체적으로 순차적으로 작동하기 때문에 디버깅 및 유지보수가 쉽고 코드 파악이 쉽습니다.
단점
- 긴 시간이 걸리는 I/O 작업이 여러개 있는 경우 성능상 느릴수 있습니다.
Asynchronous 방식
Asynchronous 방식은 Synchronous 방식과는 다르게 스레드가 어떤 함수 작업을 수행할 때 함수 작업 안에 다른 여러가지 작은 작업들이 존재한다면 해당 작은 작업들을 순차적으로 처리하지 않습니다. 작은 작업 함수들의 대기 방식에 따라 작업을 완료하는 순서가 다를 수 있습니다. 예를 들어 다음 그림과 같이 스레드#1이 함수를 호출할 때 함수 안에는 A, B, C I/O 작업이 존재합니다. 호출자인 스레드#1은 A, B, C 작업을 호출합니다.
다음 그림을 보면 A, C 작업은 논블로킹 방식으로 작동하고, B 작업은 블로킹 방식으로 작동합니다. 그래서 쓰레드#1이 A, C 작업을 호출할 때는 끝날때까지 대기하지 않고 바로 다음 작업을 진행합니다. 반면에 B 작업을 호출할 때는 B 작업이 끝날 때 까지 쓰레드#1은 대기합니다.
위 그림과 같이 Asynchronous 방식은 작업들간에 대기 방식에 따라서 작업 완료 순서가 다를수 있습니다. 위 그림과 같은 경우 B -> A -> C와 같은 순서로 작업이 완료될 수 있습니다.
Asyncrhonous 방식의 장단점
장점
- 코드가 순차적으로 완료되지 않을 수 있기 때문에 긴 시간이 걸리는 I/O 작업을 먼저 수행하면서 다른 작업을 진행할 수 있습니다.
단점
- 코드가 전체적으로 순차적으로 완료되지 않을 수 있기 때문에 디버깅 및 유지보수가 어렵고 코드 파악이 어렵습니다.
블로킹(Blocking) 방식과 논블로킹(Non-Blocking) 방식
블로킹 방식은 작업을 호출한 스레드가 작업이 끝날때 까지 대기하는 방식이고 논블로킹 방식은 작업을 호출한 스레드가 대기하지 않고 다른 작업을 계속 진행하는 방식입니다. 따라서 블로킹/논블로킹의 차이는 작업을 실행할 때 호출한 스레드의 대기 방식의 여부의 차이인 것을 알수 있습니다.
Synchronous/Asynchronous와 Blocking/Non-Blocking 조합
- Synchronous + Blocking : 작업을 호출한 스레드가 함수 작업이 끝날 때까지 대기합니다.
- Synchronous + Non-Blocking : 작업을 호출한 스레드가 대기하지 않고 다음 작업을 진행합니다.
- Asynchronous + Blocking : 작업을 호출한 스레드가 작업이 끝날 때까지 대기합니다.
- Asynchronous + Non-Blocking : 작업을 호출한 스레드가 대기하지 않고 다음 작업을 진행합니다.
위 4가지 조합의 수행 과정을 그림으로 표현하면 다음과 같습니다.
정리
Synchronous 방식과 Asynchronous 방식은 함수 실행시 전체적인 관점에서 순차적으로 함수 안에 작은 작업들을 완료하느냐 안하느냐에 차이입니다. 그리고 함수 안에 어떤 한 작업을 실행할때 작업을 호출한 스레드가 대기하느냐, 대기하지 않느냐에 차이에 따라 Blocking 방식과 Non-Blocking 방식의 차이로 구분됩니다.
References
https://choi-geonu.medium.com/%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%93%A4%EC%9D%B4-%EC%95%8C%EC%95%84%EC%95%BC%ED%95%A0-%EB%8F%99%EC%8B%9C%EC%84%B1-2-%EB%B8%94%EB%A1%9C%ED%82%B9%EA%B3%BC-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0-e11b3d01fdf8
'OperatingSystem' 카테고리의 다른 글
[운영체제][보호와보안] Security & Protection #2 Protection (0) | 2022.07.29 |
---|---|
[운영체제][보호와보안] Security & Protection #1 Security (0) | 2022.07.29 |
[운영체제][저장장치관리] 저장장치와 입출력(Storage & Input/Output) #4 파일 시스템 구현 (0) | 2022.07.28 |
[운영체제][저장장치관리] 저장장치와 입출력(Storage & Input/Output) #3 파일 시스템 인터페이스 (0) | 2022.07.28 |
[운영체제][저장장치관리] 저장장치와 입출력(Storage & Input/Output) #2 입출력 시스템 (0) | 2022.07.28 |