이거 4가지를 이해해놓아야 여러가지로 확장할 수 있음. 특히 블로킹=동기, 논블로킹=비동기로 생각하기 쉬운데 층위 자체가 다른 개념.
(솔직히 나도 제대로 이해했는지는 모르겠지만, 내가 이해하는 바로는 이러하다.)
-------------------------------------------------------------------------------------
블로킹 : 어플이 커널에 시스템콜을 날린다. 이때 커널은 이 콜에 대해 콜의 내용을 다 수행하고 나서야 리턴해준다.
-> 어플은 리턴이 안 오는 동안 놀게 됨. 작업이 완료된 리턴값을 받아감.
논블로킹 : 어플이 커널에 시스템콜을 날린다. 이때 커널은 이 콜에 대해 바로 리턴한다. 하지만 리턴 후에도 작업을 수행한다.
-> 어플은 바로 리턴이 왔으므로 일단 돌아갈 수 있음. 그러나 리턴값에 작업이 안 되어있을 수 있다.
-------------------------------------------------------------------------------------
동기 : 어플과 커널간에 일을 처리함에 있어 정해진 순서가 있다.
-> 어플은 첫번째 일이 제대로 수행되고 나서 두번째 일을 요청한다.
커널도 첫번째 일을 다 처리하고 나서 두번째 일에 착수한다.
비동기 : 어플과 커널간에 일을 처리함에 있어 정해진 순서가 없다.
-> 어플은 첫번째 일의 완료 여부와 관계 없이 두번째 일을 요청한다.
커널도 첫번째 일이 다 처리되지 않았어도 두번째 일에 착수한다. 돌려줄 때도 두번째 일을 먼저 돌려줄 수도 있다.
-------------------------------------------------------------------------------------
그리고 이러한 개념을 조합해서 IO 모델이 나옴.
- 블로킹 & 동기
동기 : 일단 한 단계가 완료되어야 다음 단계를 수행할 수 있는 작업이 있다.
블로킹 : 단계가 완료될까지 죽치고 있는다.
- 블로킹 & 비동기
비동기 : 여러 단계가 뒤죽박죽되도 된다.
블로킹 : 일꾼을 여러놈 만들어서 각자 커널 앞에 죽치게 만든다.
- 논블로킹 & 동기
동기 : 일단 한 단계가 완료되어야 다음 단계를 수행할 수 있는 작업이 있다.
논블로킹 : 단계가 완료되지 않았는데 돌아온다. 그러니 다시 또 보낸다. 완료된 놈 가져올 때까지 계속 보낸다.
- 논블로킹 & 비동기
비동기 : 여러 단계가 뒤죽박죽되도 된다.
논블로킹 : 단계가 완료되지 않았는데 돌아온다. 대신 커널이 다되면 불러준다. 그동안 다른 단계를 위해 새로운 놈 보낸다.
선 추천 후 정독
되도->돼도 (되어 = 돼임) [리듬 맞춤법 봇♬]
강추