반응형

Program/C & C++ 35

worker thread와 logic thread의 운용에 대한 poll

출처 : http://javawork.egloos.com/2210019 일반적으로 접속 혹은 접속종료을 감지하거나 패킷을 받는 일을 하는 하는 스레드를 워커스레드라고 하고 받은 패킷을 처리하는 일을 하는 스레드를 로직스레드라고 합니다. 프로그래머의 성향에 따라서 워커스레드가 로직처리까지 한다거나, 로직스레드를 하나만 둔다거나, 로직스레드를 다수로 운용하거나 하는 여러가지 방법이 있습니다. 분류해 보면 대략 아래와 같은 그림이 나옵니다. 약간 부연 설명을 하자면 Model 1 : 로직스레드 없이 워커스레드에서 로직까지 처리하는 방법 입니다. 컨텍스트 스위칭이 적어서 잘 구성하면 최고의 성능을 낼수 있지만 네트워크 처리와 로직 처리에 대한 구분을 할 수 없어서 모듈화에는 좋지 않습니다.Model 2 : 로직..

Program/C & C++ 2013.03.25

Packet Generator 패킷 생성기

출처 :http://mastercho.tistory.com/6온라인 프로그램 패킷의 전통적 처리 방법 ( 장 단 점 )온라인 프로그램을 짜는 프로그래머라면   누구나 프로토콜을 정의해 패킷을 만들고클라이언트와 서버간에 통신하는 모듈을 만들어보았을것이다그리고 이것은 일찍감치 프로그래머들에게 의해  2가지 패턴으로 정형화 되었는데 .....첫째로는  구조체를 이용하는 방법이고 두째로는 스트림 클래스를 이용하는 방법이다잘 이해가 안갈수 있으니 예를한번 살펴보자.첫번째 방법: 구조체 이용하기struct HEADER{int type;int size;}enum {ID_CS_LOG_IN = 25 };struct CS_LOG_IN : public HEADER{CS_LOG_IN() { type = ID_CS_LOGIN;..

Program/C & C++ 2012.12.28

소켓 입출력 모델 - Completion Port [IOCP] 모델

* 입출력 완료 포트(I/O completion port)- 비동기 입출력 결과와 이 결과를 처리할 스레드에 대한 정보를 담고 있는 구조로 Overlapped 모델(II)에서 나오는 APC 큐와 비슷한 개념 * 입출력 완료 포트 vs. APC 큐의 차이점- 생성과 파괴 APC 큐는 각 스레드마다 자동으로 생성되고 파괴. 입출력 완료 포트는 CreateIoCompletionPort() 함수로 생성하고 CloseHandle() 함수를 호출하여 파괴한다.- 접근 제약 APC 큐에 저장된 결과는 APC 큐를 소유한 스레드만 확인할 수 있지만 입출력 완료 포트에는 이러한 제약이 없다. 대게 입출력 완료 포트를 접근하는 작업 스레드를 별도로 도는데 이상적인 작업자 스레드 개수는 CPU 개수와 같게 하지만 몇가지 이..

Program/C & C++ 2012.09.19

c++ flex 보안

서버에서 클라이언트 접속을 수락하면 곧바로 정책정보를 전송하는 코드를 추가하였다. #################################################################void NetworkPeer:OnAccept() // 클라이언트의 접속을 처리한다.{char accept_domain[200]="\n \n \n\n"; Send(accept_domain, sizeof(accept_domain) );}################################################################# 이렇게 하게되면 플렉스의 소켓 수신 핸들러 부분에서는 바이너리 서버에 접속할때 수신받는정책정보( 200 바이트 )를 수신하는 것을 볼 수 있다. 재미있게 생각되는..

Program/C & C++ 2012.09.17

Flex3 Socket 통신시 Policy Request 처리하기 ( 소켓 인증 권한 획득하기 )

출처 : http://ummae.tistory.com/210 얼마전 재미로 만들기 시작한 것이 있다. 웹과 연동된 온라인 한자 인식기를 만드는 것이였다. 인식기엔진을 만드는 것은 이미 전에도 만들어 본 경험이 있기 때문에 그리 어렵지 않고 빠르게 만들 수 있었다. 웹과(Client) 통신을 위해 소켓통신을 하기로 했는데 서버는 책을 참조해가며 IOCP로 후딱 만들고, Client는 Flex3로 디자인하였다. 그런데 여기서 문제가 발생했다. Localhost 테스트에서는 아무런 문제 없이 동작을 했는데, 정작 서버에 올리고 Client (swf)폐이지에 접속하니 "\0"문자열이 서버로 날아가고 Client는 일정시간 대기하다가 죽는 것이였다. Adobe FlexDoc을 조금 뒤져보니 Socket 통신을 할..

Program/C & C++ 2012.09.17

Multi-thread programming(멀티 쓰레딩)

multithread programming(1) MFC에서의 Multithread OS는 구분하지 않지만 MFC는 사용자 편의를 위하여 두 가지 형태로 지원 1. Worker thread 2. User Interface thread Worker thread ::AfxBeginThread() 함수를 이용 CWinThread* ::AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, // 기본적으로 주 Process와 동일 UINT nStackSize = 0, DWORD dwCreateFlags = 0, // 0 또는 CREATE_SUSPENDED LPSECURITY_ATTRIBUT..

Program/C & C++ 2011.07.30

Multithread programming - Synchronization(2) (멀티쓰레딩의 동기화)

multithread programming - Synchronization(2) Critical Section 여러 Thread가 동시에 같은 메모리나 File을 Access하려고 할 경우 심각한 문제가 발생할 것이다. 이럴 경우 Critical Section으로 지정하면 하나의 Thread가 Access할 동안 다른 Thread가 Access하지 못하게 할 수 있다. stdafx.h 의 맨 아래 줄에 #include 를 추가하고 전역 변수로 CCriticalSection g_cs; 를 선언한다. 그래야 모든 Thread들이 Access할 수 있다. 이제 동시에 수행되어서는 안 되는 부분에 g_cs.Lock(); // 여기에동시에접근하면안되는코드를삽입한다 g_cs.Unlock(); Lock()~Unloc..

Program/C & C++ 2011.07.30
반응형