[Socket 프로그래밍] 19. 멀티쓰레드 기반의 서버구현 - 2 쓰레드 동기화 쓰레드는 실행결과를 저장하기전에 레지스터에 접근해서 값을 건드려서 우리가 원하지 않는 결과가 출력된다. 쓰레드가 지니는 문제점을 살펴보았으니, 해결책을 고민할 차례이다. 참고로 이 해결책을 가리켜 "쓰레드 동기화(Synchroniztion)'라 한다. 동기화의 두가지 측면 쓰레드의 동기화는 쓰레드의 접근 순서 때문에 발생하는 문제점의 해결책을 뜻한다. 그런데 동기화가 필요한 상황은 2가지 측면에서 생각해볼 수 있다. - 동일한 메모리 영역으로의 동시접근이 발생하는 상황 - 동일한 메모리 영역에 접근하는 쓰레드의 실행순서를 지정해야하는 상황 첫번째 언급한 상황은 이미 충분히 설명되었으니, 두번째 언급한 상황에 대해서 알아보자. 이는 쓰레드의 '실행순서 컨트롤(Control)'에 관련된 내용이.. 개발자과정준비/TCP IP Socket Programming 4년 전
[Socket 프로그래밍] 18. 멀티쓰레드 기반의 서버구현 - 1 쓰레드 등장 배경 앞에서는 멀티프로세스 기반의 서버구현에 대해 살펴보았다. 이때 보인 프로세스의 생성은 select에 비해 확실히 구분되는 장점이있다. 그러나 나름의 문제점도 있다. 프로세스마다 완전히 독립된 메모리 공간을 유지하기때문에 프로세스 사이에서 메시지를 주고받아야하는 경우에는 그만큼 구현의 어려움을 겪기도 한다. 즉, 멀티프로세스 기반의 단점은 다음과 같다. "프로세스 생성이라는 부담스러운 작업과정을 거친다" "두 프로세스 사이에서의 데이터 교환을 위해서는 별도의 IPC 기법을 적용해야한다" 하지만 이 둘은 다음의 단점에 비하면 그나마 눈감아 줄만 하다. "초당 적게는 수십 번에서 많게는 수천 번까지 일어나는 '컨텍스트 스위칭(Context Switching)'에 따른 부담은 프로세스 생성방식.. 개발자과정준비/TCP IP Socket Programming 4년 전
[Socket 프로그래밍] 12. IO 멀티플렉싱(Multiplexing) select 함수의 이해와 서버의 구현 select 함수는 멀티플렉싱 서버 구현의 대표적인 방법이다. select 함수를 사용하면 한곳에 여러 개의 파일 디스크립터를 모아놓고 동시에 이들을 관찰할 수 있다. - 수신한 데이터를 지니고 있는 소켓이 존재하는가? - 블로킹되지않고 데이터의 전송이 가능한 소켓은 무엇인가? - 예외상황이 발생한 소켓은 무엇인가? 그런데 select 함수는 사용방법에 있어서 일반적인 함수들과 많은 차이를 보인다. 보다 정확히 표현하면 사용하기가 만만치 않다. 그래도 select 함수가 멀티플렉싱 서버의 전부라고해도 과언이아니기때문에 차근차근 살펴보도록 하자. 위 그림은 select 함수를 호출해서 결과를 얻기까지의 과정을 간략히 정리한 것이다. 그림에서는 select 함수의 호출.. 개발자과정준비/TCP IP Socket Programming 4년 전
[Socket 프로그래밍] 11. 프로세스간 통신 프로세스간 통신의 기본 개념 프로세스는 완벽하게 독립된 하나의 객체라고 볼 수 있다. 프로세스간 통신이 가능하다는 것은 서로 다른 두 프로세스가 데이터를 주고 받을 수 있다는 의미가 되며, 이렇게 되기 위해서는 두 프로세스가 동시에 접근 가능한 메모리 공간이 있어야한다. 파이프(PIPE) 기반의 프로세스간 통신 다음 그림은 프로세스간 통신 방법으로 사용되는 파이프기법의 구조적 모델을 보이고 있다. 두 프로세스간 통신을 위해서는 파이프라는 것을 생성해야한다. 이 파이프는 프로세스에 속하는 자원이아니다. 이는 소켓과 마찬가지로 운영체제에 속하는 자원이다.(때문에 fork 함수의 호출에 의한 복사 대상이 아니다.) 즉, 운영체제가 마련해주는 메모리 공간을 통해서 두 프로세스는 통신을 하게된다. 그럼 먼저 파이.. 개발자과정준비/TCP IP Socket Programming 4년 전