멀티쓰레드 기반의 서버구현
//시간상 잠깐 챕터를 많이 건너띄어야 겠다..
프로세스는 나중에 공부하자 ㅠㅠ
<멀티프로세스의 단점>
- 프로세스 생성이라는 부담스러운 작업과정을 거침
- 두 프로세스 사이에서의 데이터 교환을 위해서는 별도의 ipc 기법을 적용해야 함
- 컨텍스트 스위칭에 따른 부담
<쓰레드>
- 쓰레드의 생성 및 컨텍스트 스위칭은 프로세스의 생성 및 컨텍스트 스위칭보다 빠름
- 쓰레드 사이에서의 데이터 교환에는 특별한 기법이 필요x
프로세스 : 운영체제 관점에서 별도의 실행흐름을 구성하는 단위
쓰레드 : 프로세스 관점에서 별도의 실행흐름을 구성하는 단위
쓰레드의 메모리 구조
프로세스처럼 완전히 메모리 구조를 분리시킬 것이 아니라, 스택 영역만을 분리시킴
- 컨텍스트 스위칭 시 데이터 영역과 힙은 올리고 내릴 필요x
- 데이터 영역과 힙을 이용해서 데이터를 교환o
프로세스 : 하나의 운영체제 안에서 둘 이상의 실행흐름을 형셩하기 위한 도구
쓰레드 : 하나의 프로세스 내에서 둘 이상으 ㅣ실행흐름을 형성하기 위한 도구
*POSIX(UNIX 표준 API 규격)에 근거하여 코드 작성
<쓰레드 생성>
thread : 생성할 쓰레드의 ID 저장을 위한 변수의 주소 값 전달
attr : 쓰레드에 부여할 특성 정보의 전달을 위한 매개변수 (NULL전달 시 기본적인 특성의 쓰레드)
start_routine : 쓰레드의 main 함수 역할을 하는 함수의 주소 값(함수 포인터) 전달
arg : 세 번째 인자를 통해 등록된 함수가 호출될 때 전달할 인자의 정보를 담고 있는 변수의 주소 값 전달
쓰레드 기반 프로그래밍에서 쓰레드가 실행되기에 넉넉한 시간을 줘야함
따라서 아래 함수를 사용해줌
전달되는 ID의 쓰레드가 종료될 떄까지 해당함수를 호출한 프로세스(쓰레드)를 대기상태로 둠
sleep() 대신 효율적인 함수
보면 프로세스 실행이 일시적으로 정지 되었다가 쓰레드가 종료되면서 (쓰레드의 main 함수가 반환하면서) 다시 실행이 이어지고 있음
*임계영역 : 둘 이상의 쓰레드가 동시에 실행하면 문제를 일으키는 코드블록
gcc -lpthread
쓰레드 라이브러리의 링크를 별도로 지시
gcc -D_REENTRANT
쓰레드에 안전한 함수로 자동화하여 바꿔주는것
참고문서 : 윤성우의 열혈 tcp/ip 소켓 프로그래밍
'CS > 네트워크' 카테고리의 다른 글
[TCP/IP 그림책] 개요(1장) (0) | 2019.05.10 |
---|---|
[TCP/IP 그림책] 맛보기(0장) (0) | 2019.05.10 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 2 (0) | 2019.02.08 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 (윈도우) (0) | 2019.02.07 |
[윤성우의 열혈 TCP/IP 소켓 프로그래밍] TCP 기반 서버/클라이언트 1 (0) | 2019.02.05 |
댓글