환경: Ubuntu Desktop 22.04.2 LTS on x86
0. 개념정리
I/O 란 무엇인가?
입출력 다중화
필요한 경우?
-TCP 클라이언트가 다수의 소켓을 동시에 처리해야 하는 경우
-TCP Server 가 Listening socket rhk connected socket 을 모두 처리해야하는 경우
-서버가 tcp / udp 모두 지원해야 하는 경우
I/O 모델 분류?
I/O 작업은 user space에서 직접 수행할 수 없기 때문에 user process가 kernel에 I/O 작업을 '요청'하고 '응답'을 받는 구조이다
어떤 "순서" 로 받는지에 따라서 'synchronous / asynchronous),
어떤 "타이밍" 에 받는지에 따라서 "blocking/ non-blocking) 으로 파일을 다루는 모델을 분류할 수 있다.
synchronous: 한 작업이 끝나야 다음 작업 실행 (순서 O)
asynchronous: 여러 작업을 동시에 실행 (순서 X)
blocking: 반환 값을 기다린 후 다음 작업 실행
non-blocking: 반환 값을 기다리지 않고 다음 작업 실행
특징 ?
- select()를 호출하여 I/O를 할 수 있는 File Descriptor를 리턴받아 해당 File Descriptor를 통해 I/O를 수행한다.
- Application은 select()에서 Blocked되어 Datagram Socket으로부터 메시지를 수신할 때 까지 기다린다.
- select()로부터 Readable Socket을 리턴받으면, Application은 recvfrom()을 호출하여 수신한 메시지를 Application Buffer에 복사한다.
- Blocking I/O Model에 대비적으로, I/O Multiplexing Model에서는 다수의 Descriptor를 처리할 수 있다.
- I/O Multiplexing Model은 Multi-Thread를 사용한 Blocking I/O Model과 유사하다
컴파일하는 방법
vi server.c # open the file to make any changes
gcc -o server ./server.c # compile
./server # run the program
참조해야하는 라이브러리
gcc thread.c -lpthread
gcc server.c -lpthread
gcc client.c -lpthread
'네트워크' 카테고리의 다른 글
동기, 비동기 요청의 차이 (0) | 2023.08.14 |
---|---|
[AWS] Light Sail 사용하기 (0) | 2023.06.01 |
[네트워크] TCP/UDP (0) | 2023.04.30 |
[네트워크] HTTP/Cookie/Threeway Handshake (0) | 2023.04.30 |
[네트워크] DNS/반복질의/재귀질의 (0) | 2023.04.29 |