Blocking

 

  • 작업 A가 작업 B를 호출하였을 때 작업 B가 완료될 떄 까지 작업 A는 다음 작업을 수행하지 못하는 방식을 말합니다.




Non-Blocking

 

  • 작업 A가 작업 B를 호출하였을 때 작업 A는 바로 다음 작업을 수행하는 방식을 말합니다.




동기(Synchronous) 프로그래밍이란?

 

  • 여러 테스크(Task)를 순차적으로 실행하는 방식을 동기(Synchronous) 프로그래밍이라 합니다.

동기 프로그래밍 예시

 

 

  • 동기 프로그래밍은 위 그림과 같이 앞서 수행된 하나의 작업이 완료된 후에 다음 작업을 수행하는 방식을 말합니다.




비동기(Asynchronous) 프로그래밍이란?

 

  • 여러 테스크(Task)들을 독립적으로 실행하는 방식을 비동기(Asyncrhonous) 프로그래밍이라 합니다.




비동기 프로그래밍 예시 1

 

 

  • 독립적인 각 작업을 두 개의 쓰레드가 나누어 실행하는 방식의 비동기 프로그래밍입니다.




비동기 프로그래밍 예시 2

 

 

  • 기존 두 개의 쓰레드보다 더 많은 쓰레드를 생성하여 작업을 처리하는 비동기 프로그래밍입니다.




비동기 프로그래밍 예시 3

 

 

  • 햇반 데우기는 것은 전자 레인지에 넣고 국을 끓이는 것은 가스 레인지에 올려놔서 처리하는 것과 같이 작업을 다른 담당자에게 위임 하는 방식으로 비동기 프로그래밍이 가능합니다.




비동기 프로그래밍 예시 4

 

 

  • 여러 개의 쓰레드와 Non-Block I/O를 통한 비동기 프로그래밍이 가능합니다.




비동기 프로그래밍 != 멀티 쓰레드 프로그래밍

 

  • 비동기 프로그래밍과 멀티 쓰레드 프로그래밍은 서로 다른 개념입니다. 비동기 프로그래밍은 여러 작업을 동시에 실행하는 프로그래밍 방법론이며, 멀티 쓰레드 프로그래밍은 비동기 프로그래밍의 한 종류입니다.




동기/비동기와 블락/넌블락의 차이점

 

  • 블락과 넌블락은 특정 함수가 다른 함수를 호출하였을 때 호출한 함수가 작업 완료 여부를 기다릴지 말지를 의미하는 것이지만, 동기와 비동기는 여러 작업들의 순서를 지켜야될 경우 동기로 처리하거나 또는 지키지 않아도 돼서 넌블락 또는 멀티 쓰레드를 활용해서 비동기적으로 프로그래밍 하는 것을 말합니다.



- 자료 참조 : https://www.youtube.com/watch?v=EJNBLD3X2yg

blocking I/O

 

  • blocking I/O는 I/O 함수를 호출했을 때 커널에서 I/O 작업이 완료될 때까지 호출자가 blocking 상태가 되는 I/O를 말합니다.




non-blocking I/O

 

  • non-blocking I/O는 I/O 함수를 호출했을 때 커널에게 I/O 작업을 요청한 후 호출자가 blocking 상태가 되지 않고 다음 작업을 처리할 수 있는 I/O를 말합니다.




synchronous( 동기 )

 

 

  • synchronous는 여러 작업들을 처리함에 있어서 순차적으로 하나씩 처리하는 것을 synchronus라고 합니다.




asynchronus( 비동기 )

 

  • asynchronous는 여러 작업들을 처리함에 있어서 순서와 작업 완료 여부 상관없이 독립적으로 동시에 처리하는 것을 asynchronous라고 합니다.

 

  • asynchronous는 작업을 커널이나 다른 쓰레드에 요청한 후 다음 작업을 처리하고 요청한 작업이 완료되었을 때 noti를 받거나 또는 콜백 함수가 호출되도록 합니다.




asynchronous 구현 방법

 

1. 싱글 쓰레드 환경에서 non-blocking I/O를 활용하여 작업을 처리하는 asynchronous 기법

 




2. 멀티 쓰레드 환경에서 각각의 쓰레드가 작업을 처리하는 asynchronous 기법

 




3. 멀티 쓰레드 환경에서 각각의 쓰레드가 non-blocking I/O를 활용하여 작업을 처리하는 asynchronous 기법

 




4. blocking I/O를 다른 쓰레드에서 처리하게 요청한 후 noti를 받거나 callback을 통해 처리

 




asynchronous 개념에서 주의할 점

 

  • asynchronous는 non-blocking I/O와 개념이 비슷하지만 다릅니다. non-blocking I/O는 asynchronous 프로그래밍을 구현하는 기법 중 하나로서 단순히 I/O 작업을 수행할 때 block되지 않고 return 되는 I/O를 말합니다. 하지만, asynchronous는 작업의 순서 및 완료 여부에 상관없이 커널이나 다른 쓰레드에 작업 요청 후 자신의 다음 작업을 처리하며 이후 커널이나 다른 쓰레드에서 요청했던 작업이 완료되었을 때 완료 noti를 받거나 callback 함수가 호출되도록 하는 것을 말합니다.

 

  • asynchronous 프로그래밍은 멀티 쓰레딩 프로그래밍이 아닙니다. 여러 작업을 동시에 실행하는 프로그래밍 방법론입니다. multithreading은 asynchronous programming을 사용할 수 있는 기법 중 하나입니다.




'개발 상식' 카테고리의 다른 글

정규 표현식( regular expression ) 간단한 사용법  (0) 2023.01.06
URL 문법  (0) 2022.12.26
디지털 이미지 파일 포맷에 관하여  (0) 2022.12.09
URI, URL, URN 이란?  (1) 2022.10.29
절대경로와 상대경로란?  (0) 2022.10.28

+ Recent posts