티스토리 뷰

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)이라고도 합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함