Synchronous(동기)는 차례차례 실행하는 것
task 1 → task 2 …
여러 작업들을 순차적으로 실행하도록 개발
비동기는 순차적으로 실행할 필요가 없는 것. 즉, 여러 작업들을 독립적으로 실행하는 것을 말한다.
사람은 thread 를 의미.
→ 비동기 ≠ 멀티스레싱
비동기 프로그래밍은 여러 작업을 동시에 실행하는 프로그래밍 방법론
멀티스레싱은 비동기 프로그래밍의 한 종류
non-block I/O 는 CPU 작업과 아이오 작업을 동시에 할 수 있는 작업이기 때문에 아이오 작업을 논 블락으로 하면 싱글 스레드로도 여러가지 일을 가능하게 한다.
멀티스레싱은 스레드를 많이 쓰면 쓸 수록 멀티코어를 활용할 수 있다는 장점이 있지만 컨텍스트 스위칭 비용이 늘어나게 되고 레이스컨디션이 발생하지 않게 잘 처리해줘야 한다는 주의 사항.
백엔드 프로그래밍의 추세는 스레드를 적게 쓰면서도 논블락 아이오를 통해 전체 처리량을 늘리는 방향으로 발전 중!
문맥에 따라서
case 1.
synchronous I/O = block I/O
asynchronous I/O = non-block I/O
case 2.
동기 아이오는 요청자가 아이오 완료까지 챙겨야 할 때
비동기 아이오는 완료를 noti 주거나 callback 으로 처리
case 3
asynchronous I/O : 블락 아이오를 다른 스레드에서 실행
스레드 에이에서 블락 아이오를 사용하는데 그 처리를 스레드 비로 준 뒤 스레드 비의 테스크가 끝나면 합쳐서 결과를 반환(스레드 에이 블락하기 싫어서 스레드 비를 만들어서 스레드 비를 블락)
백엔드 아키텍처 관점에서
여기서 만약 씨에서 예상치 못한 일로 인해 응답 불능으로 빠지게 되면, 응답을 기다리는 비와 에이까지 비정상 상태로 빠질 수 있다. ( 서비스 장애 )
_6.48.25.png)
그러한 문제점을 방지하기 위해 비동기로 짬.