전체 글

전체 글

    Multiplexing을 통한 싱글 프로세스의 다중 클라이언트 연결

    1. 멀티플렉싱이란? 한 개의 프로세스가 다중 클라이언트와 통신하는 또 다른 방식으론 멀티플렉싱이 있다. 멀티플렉싱이란 하나의 채널을 통해 다중 데이터가 묶여 전송되는 기술이다. 이렇게 다중 데이터가 하나의 채널, select함수를 통해 프로세스로 데이터를 전달받는것이다. 이 select 함수는 어떤 기능을 하고 어떤 호출을 할까? 기본적으로 select함수는 events가 발생한 소켓을 선택해주는 것이다. 여기서 이벤트는 소켓이 데이터를 수신했거나, 소켓이 예외가 발생했거나, 소켓이 데이터 전송이 가능한지 (read, write, exception)가 있다. 대략적인 실행 흐름으로는 소켓설정 -> 함수 호출 -> 결과(이벤트 발생 소켓)확인 순으로 진행된다. 2. select함수 이제 이 select ..

    세마포어, 뮤텍스를 활용한 공유 자원 제어

    이전에 멀티쓰레드가 하나의 자원을 공유함을 확인해 보았다. 그리고 쓰레드가 비동기 흐름을 갖기 때문에 동시에 같은 데이터를 수정할 수 있고, 이러한 이유로 의도하지 않은 오류가 날 수 있음을 확인해보았다. 그래서 공유자원을 안전하게 관리하기 위해서는 공유자원에 접근하는 부분인 임계 구역(Critical section)을 다른 쓰레드, 프로세스가 동시에 사용하지 않음을 보장하는 상호배제(Mutual exclusion)를 달성해야 한다. 동기화 방법은 세마포어와 뮤텍스가 있고, 이 두가지의 정의와 차이에 대해서 알아보자. 1. 세마포어 A. 세마포어란? 공유 자원(보호 영역, critical section) 접근을 제어하기 위한 변수 혹은 추상 데이터이다. 이 구현을 위한 함수들은 semaphore.h에 정..

    멀티 쓰레드를 활용한 멀티 클라이언트 TCP 통신

    1. 멀티 프로세스 통신의 한계 이전에는 멀티 프로세스를 활용하여 멀티 클라이언트와 TCP통신을 해보았다. 간략하게 그 방식을 정리해보자면 서버의 부모프로세스가 listening socket에서 각 클라이언트로 부터 연결 요청을 받으면 listening queue에 쌓고, 하나씩 연결 한 후에 folk, dup을 통해 자식 프로세스에게 연결을 전달(복사)하여 자식프로세스가 클라이언트와 통신을 하게 하는 방식으로, 통신 자체는 자식프로세스에게 맡기고 부모프로세스는 연결 및 자식 프로세스 생성만 맡는 형태였다. 하지만 이 방식에는 문제가 있었으니, 자식 프로세스를 생성하는 과정에서 너무나도 불필요한 메모리들이 복사가 된다는 점이었다. 이 오버해드를 해결해주는 방식이 바로 쓰레드이다. 쓰레드의 경우에는 sta..

    멀티 프로세스를 활용한 다중 클라이언트 TCP 통신, 좀비 프로세스 삭제

    단일 프로세스를 활용하여 TCP 통신을 할 때엔 하나의 프로세스가 하나의 클라이언트만 받았다. 그도 그럴것이 TCP의 정의 자체가 (IP + Port)간의 신뢰성 있는 데이터 전달이기 때문에 다른 클라이언트의 연결 및 데이터 통신을 적어도 Close되지 않는다면 받아들이지 않는다. 그렇기 때문에 다음과 같이 listening socket으로 듣고, listening queue에 저장한 해 둔 다음 차례대로 연결을 하는 것이다. 실제 실행 그렇다면 TCP 통신을 사용하면서도 다중 Client와 통신할 순 없을까? 답은 "가능하다"이다. 하지만 하나의 프로세스(포트)로는 불가능 하므로 자식 프로세스를 생성하고 그 자식 프로세스들이 통신하게 하면 된다. 이전의 통신이 어떻게 이루어지는지 잠시 확인해 보면, 주..

    DQN의 입력

    나는 큰 오해를 하고 있었다. 아타리, OpenGym등 오픈소스를 보면서 DQN의 Input이 image로 한정되고, 효율이 가장 좋다고. 하지만 몇 가지의 예시를 보면서 그것이 아니라는 것을 알게 되었다. DQN은 이미지나 음성같이 raw data만을 input으로써 받는것이 아니고 자유롭게 설정할 수 있다(학습에 필요한 데이터가 충분히 주어진다면) 그리고 DQN 알고리즘은 Neural Network Architecture과 분리 다른 존재로 봐야한다. DQN이 아무 Neural Network Architecture의 구조를 사용해도 되는것은 맞지만 일반적으로 사용되는 것은 Convolutional layers를 시작 layers로 한 구조이고 그 구조가 이미지 기반 입력에 적합한 것 뿐이다. 사용하지..