✔️ I/O
I/O란?
- 입력(Input)과 출력(Output)의 약자
- 컴퓨터 및 주변장치에 대하여 데이터를 전송하는 프로그램, 운영 혹은 장치
- I/O 작업은 커널 레벨에서만 수행할 수 있으므로 프로세스나 스레드는 커널에게 I/O를 요청해야 함

Blocking I/O
- 프로세스(스레드)가 커널에게 I/O를 요청하는 함수를 호출한 후, 커널이 작업을 완료하면 작업 결과를 반환함
- I/O 작업이 진행되는 동안 프로세스(스레드)는 자신의 작업을 중단한 채 대기해야 하므로 리소스(CPU) 낭비가 심함
- 만약 여러 클라이언트가 접속하는 서버를 Blocking 방식으로 구현하는 경우,
다른 클라이언트가 진행하는 작업을 중지하지 않게 하기 위해
클라이언트 별로 별도의 스레드가 생성되므로 많아진 스레드로 인한 문맥 교환이 증가하여 비효율적

Non-Blocking I/O
- 프로세스(스레드)가 커널에게 I/O를 요청하는 함수를 호출하여 커널에게 해당 소켓으로부터 데이터를 받고 싶다고 요청한 후,
커널이 곧바로 recvBuffer를 채워서 보내지 못하므로 "EWOULDBLOCK"을 반환하고, 프로세스(스레드)는 다른 작업을 진행
이후 recvfrom 함수는 빠른 속도로 데이터를 복사한 후, 복사한 데이터의 길이와 함께 반환
만약 recvBuffer에 프로세스(스레드)가 받을 수 있는 데이터가
커널이 가지고 있는 메모리에 있는 경우에는 훨씬 빠른 속도로 데이터를 복사하여 받아옴 - I/O 작업이 진행되는 동안 프로세스(스레드)의 작업을 중단하지 않음

'Tech Interview > Network' 카테고리의 다른 글
[Network] 목차 (0) | 2024.01.27 |
---|---|
[Network] 동기와 비동기 (0) | 2024.01.27 |
[Network] 로드 밸런싱 (0) | 2024.01.27 |
[Network] 암호화 (0) | 2024.01.27 |
[Network] Socket (0) | 2024.01.24 |
✔️ I/O
I/O란?
- 입력(Input)과 출력(Output)의 약자
- 컴퓨터 및 주변장치에 대하여 데이터를 전송하는 프로그램, 운영 혹은 장치
- I/O 작업은 커널 레벨에서만 수행할 수 있으므로 프로세스나 스레드는 커널에게 I/O를 요청해야 함

Blocking I/O
- 프로세스(스레드)가 커널에게 I/O를 요청하는 함수를 호출한 후, 커널이 작업을 완료하면 작업 결과를 반환함
- I/O 작업이 진행되는 동안 프로세스(스레드)는 자신의 작업을 중단한 채 대기해야 하므로 리소스(CPU) 낭비가 심함
- 만약 여러 클라이언트가 접속하는 서버를 Blocking 방식으로 구현하는 경우,
다른 클라이언트가 진행하는 작업을 중지하지 않게 하기 위해
클라이언트 별로 별도의 스레드가 생성되므로 많아진 스레드로 인한 문맥 교환이 증가하여 비효율적

Non-Blocking I/O
- 프로세스(스레드)가 커널에게 I/O를 요청하는 함수를 호출하여 커널에게 해당 소켓으로부터 데이터를 받고 싶다고 요청한 후,
커널이 곧바로 recvBuffer를 채워서 보내지 못하므로 "EWOULDBLOCK"을 반환하고, 프로세스(스레드)는 다른 작업을 진행
이후 recvfrom 함수는 빠른 속도로 데이터를 복사한 후, 복사한 데이터의 길이와 함께 반환
만약 recvBuffer에 프로세스(스레드)가 받을 수 있는 데이터가
커널이 가지고 있는 메모리에 있는 경우에는 훨씬 빠른 속도로 데이터를 복사하여 받아옴 - I/O 작업이 진행되는 동안 프로세스(스레드)의 작업을 중단하지 않음

'Tech Interview > Network' 카테고리의 다른 글
[Network] 목차 (0) | 2024.01.27 |
---|---|
[Network] 동기와 비동기 (0) | 2024.01.27 |
[Network] 로드 밸런싱 (0) | 2024.01.27 |
[Network] 암호화 (0) | 2024.01.27 |
[Network] Socket (0) | 2024.01.24 |