Blocking
- 요청한 작업을 마칠 때까지 계속 대기
- 즉시 return
- return 값을 받아야 끝
- return 값을 받을 때까지 한 Thread를 계속 사용/대기
Non-Blocking
- 요청한 작업을 즉시 마칠 수 없다면 즉시 return
- 즉시 리턴하지 않음
- 하나의 Thread가 여러 개의 IO를 처리 가능

예시
급하게 알아야 하는 답을 누군가에게 물어봐야하는 상황일 때
- 전화로 물어봐서 즉답을 얻는다. = 동기 요청처리
- 이메일로 물어보고 메일 송신을 완료(return)했지만 답은 언제 올지 모른다. = 비동기 요청처리
- 전화를 했는데 상대방이 너무 바빠 전화를 받지 않음
전화를 받을때까지 계속 대기 = 동기 + 블록킹
- 전화를 했는데 안 받음
끊었다가 나중에 다시 전화함
계속 반복했다가 어느 순간에 받아서 답을 얻음 = 동기 + 논블록킹
참고 영상
블로킹과 논블록킹은 다른 요청의 작업 처리를 위해 현재 작업을 차단, 대기 하냐 안하냐의 유무
즉, 전체적인 작업 흐름 자체를 막냐 안막냐
파일 읽는 작업을 할 때에
블로킹은 파일을 다 읽을 때 까지 대기
논블로킹은 파일을 다 읽지 않아도 다른 작업 가능
참고
완벽히 이해하는 동기/비동기 & 블로킹/논블로킹
blocking vs non-blocking