티스토리 뷰
Blocking과 관련해서 받은 면접 질문을 정리한 포스팅입니다.
제가 경험한 면접 질문에 대한 대답을 정리하다보니 저만의 대답 방식으로 인해 간결할 수 있는 점 양해바랍니다.
포스팅에 앞서 Java와 JavaScript 언어를 모두 사용해보신 분들에게는 필수 질문으로 여겨집니다.
면접관이 두 언어의 차이점을 먼저 물어본 뒤, 이 질문을 할 가능성이 높으니 꼭 본인만의 대답을 만들어두면 좋을 것입니다.
Blocking I/O vs Non-Blocking I/O
블록킹 I/O는 I/O 작업을 처리하는 동안 호출한 스레드가 작업이 끝날 때까지 대기하는 방식입니다.
이 방식은 I/O 작업이 완료될 때까지 대기하므로, 호출한 스레드가 블록되어 다른 작업을 수행할 수 없게 됩니다.
따라서 여러 개의 I/O 작업이 발생할 때 블록되어 있는 동안 다른 작업을 수행할 수 없는 단점이 있습니다.
넌블록킹 I/O는 I/O 작업이 완료될 때까지 기다리지 않고, 호출한 스레드를 바로 반환하는 방식입니다.
이 방식은 I/O 작업이 완료되지 않았더라도 호출한 스레드는 다른 작업을 수행할 수 있습니다.
그러나, I/O 작업이 완료되지 않았으므로 호출한 스레드가 다시 I/O 작업을 체크하거나 콜백을 처리하는 등의 추가적인 작업이 필요합니다.
넌블록킹 I/O는 여러 개의 I/O 작업을 병렬로 처리할 수 있고, 대기 시간을 최소화할 수 있어서 대규모 시스템에서 성능 개선을 할 수 있습니다.
그러나, 블록킹 I/O에 비해 복잡하고 코드가 길어질 수 있으며, I/O 작업이 완료되지 않았을 때 추가적인 처리가 필요하므로 오버헤드가 발생할 수 있습니다.
넌블록킹된 I/O 작업을 호출 스레드에 가져오는 방법 두가지
멀티플렉싱과 콜백 방법 총 두 가지가 존재합니다.
멀티플렉싱은 하나의 스레드가 여러 개의 I/O 작업을 모니터링하면서 작업이 완료된 것을 감지하는 기술입니다.
주로 select, poll, epoll 등의 시스템 콜을 사용합니다.
콜백은 I/O 작업이 완료되면 호출될 함수를 등록하는 방식으로, 비동기적으로 작동하는 방식입니다.
I/O 작업이 완료되면 시스템에서 콜백 함수를 호출하고, 해당 콜백 함수에서 작업 결과를 처리합니다.
이벤트 처리와 관련된 코드를 콜백 함수에 작성하므로, 이벤트 기반 프로그래밍(Event-driven Programming)이라고도 합니다.
'면접 질문' 카테고리의 다른 글
백엔드 면접 질문 - 카프카 (1) | 2023.08.19 |
---|---|
백엔드 면접 질문 - 인덱스 (0) | 2023.04.29 |
ChatGPT에게 물어본 백엔드 면접 예상 질문과 답변 (0) | 2023.02.23 |
기본형(Primitive type)과 참조형(Reference Type) (0) | 2020.10.06 |
Vector, ArrayList, LinkedList (0) | 2020.10.06 |
- Total
- Today
- Yesterday
- programmers
- kkoon9
- 프로그래머스
- BAEKJOON
- Olympiad
- Spring
- MSA
- 테라폼
- Java
- kotest
- C++
- node.js
- Algorithm
- Spring Boot
- 이팩티브 자바
- 정규표현식
- 이펙티브 자바
- 클린 코드
- BOJ
- 객체지향
- 클린 아키텍처
- 디자인 패턴
- Kotlin
- 알고리즘
- 디자인패턴
- Effective Java
- AWS
- JPA
- 백준
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |