적어주신 말씀에 모두 동의합니다. 그러나 이 두 기준축을 사분면으로 한 단면에 그려야 하는가, 그릴 수 있는가, 적절하게 구분되는가에 대해선 여전히 확신을 가지기 어렵네요. 제겐 Blocking과 Sync가 개념적으로 90%의 맥락을 같이 하는 느낌입니다. Non-Blocking&Async도 마찬가지입니다.

Blocking-Sync와 Non-Blocking-Async가 함께 쓰이는 경우가 많지만 구분이 필요한 경우들이 있습니다.

  • Blocking-Async: Select같은 I/O 멀티플렉싱
  • Non-Blocking-Sync: 데이터 폴링(polling)

때문에 저는 오히려 구분해 사용하는게 맞다고 생각합니다.

말씀주신 예시들에 대한 이해가 거의 없어서 더 공감이 잘 안되는 것 같네요.

https://incredible-larva.tistory.com/entry/… 이 글에선 아래와 같이 설명하고 있습니다:

결국 select를 요청한 user process가 return 받은 값을 보고 후속 작업 유무를 판단하는 것이다. 예측할 수 없게 인입되는 여러 I/O 요청이 한 번에 관리 되고 있기에 Asynchronous하다고 보는 경우도 있지만 결국 실제 개별 I/O 동작은 Synchronous 한 동작을 보인다는 것.

이에 대해선 어떤 의견을 가지고 계신지 궁금합니다. 사실 저는 이 시점에서, 더이상 이 2x2 구분법이 무의미하다고 느껴졌습니다. 도메인마다, 관점마다 해석이 분분한 것 같아서요.

이어서, kernel의 응답을 기다리다보면 kernel에서 결과 값이 준비되었다는 callback 신호가 오고 user process는 자신의 buffer로 데이터를 복사해오는 모습을 보여준다.

이 부분이 위에서 동의하신 콜백에 의한 트리거 방식이기 때문에 굳이 구분/정의해야 한다면 Blocking-Async라고 부르는게 맞는 것 같구요.
관점에 따라 애매하기 보이는 경우가 있을수도 있다고 생각합니다.

다만, 폴링이 확실한 예제인데요,
https://en.wikipedia.org/wiki/Polling_(computer_science)

폴링의 경우 데이터가 준비되었는지를 반복적으로 확인하기 때문에 Sync-Blocking의 적절한 예제입니다.