티스토리 뷰
블로킹 I/O 방식
블로킹 I/O 방식에서는 I/O 요청에 해당하는 함수 호출은 작업이 완료 될 때까지 스레드의 실행이 차단된다.
즉 I/O가 실행하는 동안 그 스레드의 동작 자체가 멈추고 그 스레드의 CPU는 놀고 있는 것이다.
전통적인 방식에서는 많은 I/O를 처리하기 위해서 멀티스테드를 지원하는 방식으로 진화해나갔다.
하지만 여기서의 단점은 스레드의 갯수는 한계가 있다는 것이다.
또한 스레드는 시스템 리소스 측면에서 비용이 그리 싸지 않기 때문에,
각 I/O에 대해서 장시간 사용하지 않고 실행되어 있는 스레드를 방치하는 것은 효율성 측면에서 최상의 방법은 아니다.
논블로킹 I/O 방식
이와 반대로 논 블로킹 I/O방식은 리소스를 액세스하는 또 다른 메커니즘을 지원하는데,
이 모드에서 시스템 호출은 데이터가 읽히거나 쓰여질 때까지 기다리지 않고 항상 즉시 반환된다.
호출하는 순간에 결과를 사용할 수 없는 경우,
이 함수는 단순히 미리 정의된 상수를 반환하여 그 순간에 반환할 수 있는 데이터가 없음을 나타낸다.
기본적으로 이런 방법을 쓸 때에는 busy waiting을 사용하는데, 이런 경우엔 대부분의 경우 사용할 수 없는 리소스를 반복하는데만 소중한 cpu를 사용한다. 따라서 대부분 엄청난 양의 cpu 시간 낭비를 초래한다.
따라서 이런 경우의 해결책은 이벤트 디멀티플렉싱 방법이 있다.
이벤트 디멀티플렉싱
이벤트 디멀티플렉싱 방법은 busy waiting을 해결한 논블로킹 I/O 방식인데, 최신 os에서는 대부분 지원한다.
이 방법을 동기 이벤트 디멀티플렉서 또는 이벤트 통지 인터페이스라고 부르는데, busy waiting을 하는 대신,
감시자에 지금 하는 작업들을 추가 해놓은 뒤, 처리할 수 있는 이벤트가 하나라도 있으면 그 때 작업을 시작한다. 따라서 busy waiting을 하면서 cpu가 계속 낭비되지 않아도 되는 것이다. 옵저버 패턴에 의한 구현이라고 할 수 있다.
논 블로킹 I/O의 장점과 단점
논 블로킹 I/O방식은 싱글스레드 방식으로, 이벤트 디멀티플렉싱 방법을 사용하기 때문에 cpu의 유휴시간을 최소화 할 수 있다.
블로킹 I/O방식과의 차이를 보았을 때, 커피집을 비유로 하자면
한번에 한 주문만 받고 음식을 해온 다음에야 다음 주문을 받는 종업원이 100명 있는 것과
한사람이 주문을 받은 뒤 번호표를 나눠주고, 다른 99명은 요리만 해서 나오면 손님을 호출하는 방식의 차이라고 할 수 있다.
하지만 논블로킹 방식의 경우에는 cpu의 할 일(주문을 받는 일)이 많아지면 많아 질 수록 뒤에 주문을 기다리는 사람들이 불편하기 때문에 cpu가 할 일이 많은 작업 같은 경우에는 적합하지 않다. 하지만 file reading, writing과 같은 작업이 많은 경우에는 cpu보다는 I/O 작업이 많기 때문에 좀 더 유리하다고 할 수 있다.
'Javascript' 카테고리의 다른 글
WebView의 디버깅 (0) | 2021.01.20 |
---|---|
최상위 window의 parent (0) | 2021.01.19 |
Promise 내의 async (1) | 2021.01.07 |
javascript의 closure (0) | 2021.01.04 |
[YOU DON'T KNOW JS] 3장 객체 (1) (0) | 2019.07.31 |
XHR(XML Http Request)의 동작방식과 호출 방법 (0) | 2019.07.12 |
Javascript의 this에 대하여 (2) - this의 바인딩 규칙 (0) | 2019.07.06 |
Javascript의 this에 대하여 (1) (0) | 2019.06.21 |
- Total
- Today
- Yesterday
- npm
- javascript #백준 #알고리즘 #LCS
- 백준
- 색종이자르기
- 백준 #알고리즘 #전깃줄 #NodeJs #javascript
- java #오르막수 #백준 #알고리즘
- java #백준 #알고리즘 #2805 #나무자르기
- java #알고리즘 #백준 #패션왕신해빈
- java #백준 #알고리즘 #로또 #6603
- 2630번
- 쿼드트리
- 한글 자동 완성
- webspider
- javascript #연속합 #알고리즘 #백준
- 중간거리 #야만나 #약속장소추천 #중간위치 #웹 #리액트 #React #reactjs #kakao지도 #kakaoapi
- TypeScript
- webpack
- java #하노이 #알고리즘 #백준
- Game
- Javascript
- java #퀵소트 #quicksort #알고리즘 #백준
- java #알고리즘 #백준 #퇴사
- javascript #백준 #회의실배정 #알고리즘
- 백준 #java #알고리즘
- react
- java #알고리즘 #백준
- 알고리즘
- 1992번
- Terminal
- java #알고리즘 #백준 #N과M #백트래킹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |