운영체제 - 비동기 프로그래밍

강민승·2023년 4월 20일
0
post-thumbnail

프로그래밍 관점에서

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)

그러한 문제점을 방지하기 위해 비동기로 짬.

profile
Step by Step goes a long way. 꾸준하게 성장하는 개발자 강민승입니다.

0개의 댓글