✍️ 개인 스터디 기록

동기 VS 비동기, 블로킹 VS 논블로킹

cocoroocoo 2022. 11. 6. 03:41

 

동기 VS 비동기

이전 작업의 결과가 다음단계 에서 바로 보장되냐 아니냐의 차이이다.

 

즉 만약 어떤 작업이 동기 작업이라면, 그 작업의 결과값을 내가 바로 다음 단계에서 확인 할 수 있다는 것이다.

즉 만약 어떤 작업이 비동기 작업이라면, 그 작업의 결과값을 내가 바로 다음에서 확인하는것을 보장하지 않는다는 것이다. 즉 다음단계에서 결과값이 없을 수도 있다는 것이다.

 

그러므로 어떤 작업을 동기적으로 실행시킬지, 비동기적으로 실행시킬지 선택해야하는 상황이라면

 

만약 다음 작업에서 이전 작업의 결과값이 꼭 필요하다면 동기적인 방법으로,

이전 작업의 결과 값이 다음단계에서는 구지 필요 없는 상황 이라면 비동기적인 방법을 써도 괜찮다고 볼 수 있다.

 

 

 

블로킹 VS 논블로킹

제어권(다음 코드를 실행)을 막는지 아닌지의 여부

 

즉 만약 어떤 작업이 블로킹 작업이라면, 그 작업을 실행하는 순간 제어권이 그쪽으로 넘어간다는 것을 의미한다. 즉 나는 그 작업이 끝날때까지 강제로 대기하게 되는 것이다. ㄷ ㄷ ㄷ ㄷ

반대로 만약 어떤 작업이 논블로킹 작업이라면, 그 작업이 실행 되도 나는 제어권이 남아있어서 하던 일을 계속하고 대기할 필요가 없어지는것을 의미한다.

 

 

동기 VS 비동기 X 블로킹 VS 논블로킹

 

  동기 I/O
(I/O작업의 결과 값이 다음 작업에 바로 보장 됨)
비동기 I/O
(I/O작업의 결과 값이 다음 작업에 없을 수 있음, 보장X)
블로킹 I/O(제어권을 박탈, I/O 처리한다고 멈춤) 내가 I/O작업 호출 했는데 그거 실행 될때까지 나는 멈추고(블로킹),  I/O작업 완료 되면 실행 결과도 보장되므로 그거 가지고 나머지 작업들을 실행(동기) 하는 구조 내가 I/O작업을 호출 했는데 그거 실행 될 때까지 나는 일단 멈춤, 그런데 내가 I/O작업 결과 값 가지고 내가 딱히 어떤 작업을 하는건 아님
⇒ 별도로 I/O작업 결과 값 가지고 내가 딱히 어떤 작업을 이어서 하는건 아닌데 I/O작업 실행 될때 까지 내가 멈출 필요가 있을까?
⇒ 구지 이 방식을 선택해서 사용하는 케이스는 거의 없을 듯
논블로킹 I/O (제어권 유지, I/O 처리하느라 안멈춤) 내가  I/O작업 호출 했는데 그거 실행 될때까지 나는 안멈추고(논블로킹) 계속 I/O작업 완료 됬는지 체크함 그리고 비로소 I/O작업이 완료 되면 그 실행 결과 가지고 나머지 작업들을 실행(동기) 하는 구조 내가 I/O작업 호출 했는데 그거 실행될 때까지 나는 안멈추고 내 다른 할일 함. (I/O작업의 결과는 어차피 그때는 보장받을 수 없으니까 결과랑 상관없는 일만 함)

 

 

출처:

 

블로킹 Vs. 논블로킹, 동기 Vs. 비동기

와 드디어 이해했다 속이 후련~

velog.io

 

 

Blocking-NonBlocking-Synchronous-Asynchronous

꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면

homoefficio.github.io