취미가 좋다

Blocking / Non-blocking & Synchronous / Asynchronous 본문

Computer Science/네트워크

Blocking / Non-blocking & Synchronous / Asynchronous

benlee73 2021. 10. 4. 18:18

비슷해보이지만 다른 Blocking과 동기화를 알아보자.

 

아래처럼 A함수에 B함수가 들어가 있다고 가정한다.

def func_A():
    func_B()
    ...

 

Blocking

함수 B의 동작이 마칠 때까지 제어권이 B에게 있다.

B이 동작이 끝난 후에 A에게 제어권이 돌아간다.

Non-blocking

함수 B가 시작하자마자 제어권을 함수 A에게 넘긴다.

함수 B가 끝나지 않았지만 A가 다음 코드를 실행한다.

 

즉, 내부에서 호출된 함수가 제어권을 바로 주는 지, 동작을 끝낸 뒤 주는 지에 따라 구별된다.

 

Synchronous (동기)

함수 A가 기다리면서 함수 B의 수행 결과나 종료 상태를 계속 체크한다.

Asynchronous (비동기)

함수 B의 수행 상태를 함수 A가 신경쓰지 않는다.

Callback 함수를 사용하여 함수 B가 직접 처리한다.

 

즉, 호출된 함수의 결과를 계속 신경쓰는 지 여부에 따라 구별된다.

  • JAVA : Sync-Blocking
  • Javascript : Async-NonBlocking

Blocking I/O

  1. Process(Thread)가 커널에게 I/O를 요청하는 함수를 호출
  2. 커널이 작업을 완료하면 작업 결과를 반환 받음
  • I/O 작업이 진행되는 동안 user Process(Thread)는 자신의 작업을 중단한 채 대기한다.
  • I/O 작업이 CPU 자원을 거의 안쓰기 때문에 리소스 낭비가 심하다.

 

Non-Blocking I/O

  1. User Process가 recvfrom 함수 호출하여 커널에게 해당 소켓으로부터 데이터를 받고 싶다고 요청한다.
  2. 커널은 바로 recvBuffer를 채워서 보내지 못하므로 "EWOULDBLOCK"을 반환한다.
  3. User Process는 다른 작업을 진행한다.
  4. recvBuffer에 user가 받을 수 있는 데이터가 있는 경우 버퍼로부터 데이터를 복사해서 가져온다.
  5. recvfrom 함수는 빠른 속도로 데이터를 복사한 후 복사한 데이터의 길이와 함께 반환한다.

 


https://gyoogle.dev/blog/computer-science/network/Blocking,Non-blocking%20&%20Synchronous,Asynchronous.html

 

[Network] Blocking/Non-blocking & Synchronous/Asynchronous | 👨🏻‍💻 Tech Interview

[Network] Blocking/Non-blocking & Synchronous/Asynchronous homoefficio (opens new window)님 블로그에 나온 2대2 매트릭스로 잘 정리된 사진이다. 이 사진만 보고 모두 이해가 된다면, 차이점에 대해 잘 알고 있는 것이

gyoogle.dev

 

Comments