전체 글174 Chapter 19 - Windows에서의 쓰레드 사용 Chapter 19 - Windows에서의 쓰레드 사용 19-1 : 커널 오브젝트(Kernel Objects) 윈도우 운영체제가 생성해서 관리하는 리소스(프로세스, 쓰레드, 파일, 세마포어, 뮤텍스 등)들은 관리를 목적으로 정보를 기록하기 위해 내부적으로 데이터 블록인 '커널 오브젝트'를 생성함 커널 오브젝트의 소유자는 커널(운영체제) 따라서 커널 오브젝트의 생성 / 관리 / 소멸은 모두 운영체제의 몫 19-2 : 윈도우 기반의 쓰레드 생성 main() 함수를 호출하는 주체는 쓰레드 현재는 운영체제 레벨에서 쓰레드를 지원 쓰레드를 별도로 생성하지 않는 프로그램을 단일 쓰레드 모델의 프로그램이라고 부름 쓰레드를 별도로 생성하는 프로그램은 멀티 쓰레드 모델의 프로그램이라고 부름 윈도우에서 쓰레.. 2023. 2. 24. Chapter 18 - 멀티쓰레드 기반의 서버구현 Chapter 18 - 멀티쓰레드 기반의 서버구현 18-1 : 쓰레드의 이론적 이해 멀티프로세스 기반은 프로세스 생성자체에 큰 부하가있고, 프로세스 사이의 데이터 교환을 위해 별도의 IPC 기법을 적용해야한다는 단점이 존재함 무엇보다도 컨텍스트 스위칭(Context Switching)으로 인한 비효율이 크게 발생 따라서 이러한 단점을 극복하기 위해 쓰레드(Thread)가 등장 쓰레드의 생성 및 컨텍스트 스위칭은 프로세스보다 빠름 쓰레드 사이의 데이터 교환에는 특별한 기법이 필요하지 않음 프로세스는 데이터/힙/스택 영역을 각각 별도로 가짐 반면 쓰레드는 한 프로세스 내에서 스택 영역만을 독립적으로 유지함 18-2 : 쓰레드의 생성 및 실행 쓰레드는 별도의 실행흐름을 갖기 때문에 쓰레드만의 main() 함수.. 2023. 2. 24. 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. 이전 1 ··· 14 15 16 17 18 19 20 ··· 44 다음