본문 바로가기

개인공부121

Chapter 17 - select보다 나은 epoll 17-1 : epoll의 이해와 활용 select() 기반 멀티플렉싱은 오래 전에 개발되어 최적화한다 해도 성능이 그리 좋지 못함 select() 함수 호출이후 항상 모든 파일 디스크립터를 대상으로 반복문이 실행됨 select() 함수를 호출할 때마다 관찰대상에 대한 정보들을 인자로 매번 전달해야하며, 이는 운영체제에 전달되기 때문에 부담이 따름 따라서 웹 기반 서버개발이 주를 이루는 오늘날 개발환경에서는 대안으로 epoll을 활용(리눅스에서, 윈도우에서는 IOCP) epoll은 운영체제에게 관찰대상에 대한 정보를 한번만 알려주고, 변경 사항이 있을때만 알려줌 단, epoll이나 IOCP과 같은 개선된 IO 멀티플렉싱 모델은 운영체제별로 호환되지 않기 때문에 대부분의 운영체제에서 지원되는 select().. 2023. 2. 24.
Chapter 16 - 입출력 스트림의 분리에 대한 나머지 이야기 16-1 : 입력 스트림과 출력 스트림의 분리 fork() 함수 호출로 입력과 출력에 사용되는 파일 디스크립터를 구분 입력루틴(코드)과 출력루틴의 독립을 통한 구현의 편의성 증대 입력에 상관없이 출력이 가능하게 함으로써 속도의 향상 기대 fopen() 함수 호출로 읽기모드의 FILE 포인터와 쓰기모드의 FILE 포인터를 구분 읽기모드와 쓰기모드의 구분을 통한 구현의 편의성 증대 입력버퍼와 출력버퍼를 구분함으로써 버퍼링 기능의 향상 스트림 분리 이후 EOF에 대한 문제점 예시 // sep_serv.cpp #include #include #include #include using namespace std; #define BUF_SIZE 1024 int main(int argc, char *argv[]) { .. 2023. 2. 24.
Chapter 15 - 소켓과 표준 입출력 15-1 : 표준 입출력 함수의 장점 표준 입출력 함수는 이식성(Portability)이 뛰어나며 버퍼링을 통한 성능 향상에 도움이 됨 표준 입출력 함수를 사용시 소켓의 입출력 버퍼와는 별도의 추가적인 입출력 버퍼가 제공됨 따라서 표준 입출력 함수 버퍼에 데이터가 먼저 전달되고, 이 데이터가 소켓의 출력버퍼로 이동된 후 마지막으로 상대방에게 전송됨 전송해야할 데이터의 양이 많을수록 버퍼링의 유무에 따른 성능차가 발생함 이는 데이터 전송 패킷에 헤더정보가 들어가기 때문 즉, 버퍼링으로 한번에 전송하는 데이터의 양을 늘려 출력버퍼로의 데이터 이동 횟수를 줄이는 것이 효율적임 시스템 함수를 이용한 파일복사 프로그램 예시 // syscpy.cpp #include #include #include #define B.. 2023. 2. 24.
Chapter 14 - 멀티캐스트 & 브로드캐스트 14-1 : 멀티캐스트(Multicast) 멀티캐스트 방식 데이터전송은 UDP 기반 단, 하나의 목적지를 두었던 UDP에서와 달리 멀티캐스트에서의 데이터 전송은 특정 그룹에 가입되어있는 다수의 호스트가 됨 멀티캐스트 그룹 : 클래스 D에 속하는 IP주소(224.0.0.0 - 239.255.255.255) 멀티캐스트 서버는 특정 멀티캐스트 그룹을 대상으로 데이터를 딱 한번 전송 한번의 전송으로 그룹에 속하는 모든 클라이언트가 데이터를 수신 멀티캐스트 그룹의 수는 IP주소 내에서 추가 가능 특정 멀티캐스트 그룹으로 전송되는 데이터를 수신하기 위해서는 해당 그룹에 가입 멀티캐스트 패킷은 형태가 UDP 패킷과 동일 라우터들이 네트워크상에 띄워놓아진 하나의 패킷을 복사하여 다수의 호스트에 전달 따라서 하나의 영역.. 2023. 2. 24.