본문 바로가기

학교공부/운영체제

동기/비동기/차단/비차단

 

동기와 비동기 차단과 비차단

너무 헷갈린다. 대충 동기화는 전체 프로세스간의 전달 방식 차단은 한 쓰레드의 상태를 나타내는거 같은데 보통 (차단, 동기), (비차단,비동기)와 묶여서 사용되어 같은듯 다르게 느껴진다. 

 

그래서 내 방식대로 정리할거다. 근데 멍청해서 틀릴 수도 있음.

 

검색하면 9할 이상 보이는 그림

근데 어느 블로그에선 이걸로 설명하고 어느 블로그에선 틀렸다고 한다. select가 synchronous에 더 가깝다는데 나도 그렇게 생각한다.

 

asynchronous 하면서 blocking 한 경우가 있을까? 순서는 자유로운데 상태는 blocking이면 결국 Synchronous하게 진행되는거 같은뎅

 

 

 

암튼 찾다가 가장 마음에드는 설명을 발견해서 올려본다.  (출처 https://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking )

 

synchronous / asynchronous 는 두 모듈간의 관계를 설명한다. 

blocking / non-blocking 한 모듈의 상태를 설명한다.

An example:
Module X: "I".
Module Y: "bookstore".
X asks Y: do you have a book named "c++ primer"?

 

1) blocking: X는 대답을 받을 때까지 기다린다. (X 는 blocking 상태)  

2) non-blocking : Y가 대답하기 전까지 X는 다른 일을 자유롭게 할 수 있다. 매 분마다 Y가 대답했는지 확인하거나 또는 Y가 대답하기 전까지 돌아가지 않는다. 

3) synchronous : X는 Y의 대답을 받을 때까지 기다린다. X는 Y가 끝날 때까지 진행되지 않는다.

4) asynchronous : Y가 대답하기 전까지 X는 다른 일을 자유롭게 할 수 있다. Y가 대답하기 전까지 돌아가지 않는다. 

 

2)와 4)의 case가 non-blocking과 asynchronous의 차이이다. 

 

 

 

 


non-blocking & synchronous 한 예시 (비효율적이지만 이해를 위한 예시)

// thread X
while (true) {
msg = recv(Y, NON_BLOCKING_FLAG);
if (msg is not empty)
{ break;}
sleep(2000); // 2 sec
}

// thread Y
// prepare the book for X
send(X, book);

non-blocking이 asynchronous을 의미하지 않는다. X는 분명 block되지 않았지만 그렇다고 진행되는 상태는 아님. 뭔가 select하고 비슷한거 같음..

 

 

암튼 중요한건 이것들을 구분할줄 알아야됨.

 

 

또 다른 예시를 보자

// Module X = Module X1 + Module X2
// Module X1

while (true) {
msg = recv(many_other_modules, NON_BLOCKING_FLAG);
 if (msg is not null) {
   if (msg == "done") {
         break;
      }
  // create a thread to process msg
 }
sleep(2000); // 2 sec
}

// Module X2
broadcast("I got the book from Y");

// Module Y
// prepare the book for X
send(X, book);

 

여기서 알 수 있는점

  • X1 is non-blocking
  • X1 and X2 are synchronous
  • X and Y are asynchronous (첫번재 예제와 다르게 다양한 모듈에서 recv한다 즉 X와 Y간의 약속이 없음)

이런 방식으로 구분할 수 있다. 중요한건 어떤 상황에서 어떠한 방식으로 구현하는게 효율적인지 고민하는거다.

 


궁금한 점 :

1) thread의 blocking 상태가 process의 waiting상태 같은건가? 

2) 비동기적 비차단 형식의 통신이 있나? 

 

 

'학교공부 > 운영체제' 카테고리의 다른 글

Memory Management Starategies  (0) 2020.05.20
Deadlock  (0) 2020.05.15
Synchronization  (0) 2020.05.09
Process Scheduling - 2  (0) 2020.05.01
Process Scheduling  (0) 2020.04.29