IOCP 2005/11/10.

Slides:



Advertisements
Similar presentations
컴퓨터와 인터넷.
Advertisements

contents Thread function Create Thread Terminate Thread
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
발표자 : 권만준 지능자동화연구실/충북대학교 2004년 05월 04일 화요일
6장. 멀티스레드 멀티스레드 프로그래밍의 필요성을 이해하고 기본 개념을 익힌다.
Image & Video processing
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
Windows CE 메모리 아키텍처 및 관리 서진호
Network Lab. Young-Chul Hwang
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
스레드의 개념과 동작 원리를 이해한다. MFC 스레드의 두 종류인 작업자 스레드와 UI 스레드 사용법을 익힌다.
MultiThread.
Chapter 11. Raw 소켓.
컴퓨터 계측 및 실습 D/A-converter
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
Chapter 02. 윈도우 소켓 시작하기.
Chapter 12. 직렬 통신과 무선 프로토콜.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
07. 디바이스 드라이버의 초기화와 종료 김진홍
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
26. 매크로와 전처리기.
Chapter 12. 직렬 통신과 무선 프로토콜.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
Sungkyunkwan University OS Project Dongkun Shin
Servlet 서블릿 기초 FORM 처리 서블릿의 API 세션과 쿠키 com.oreilly.servelet 패키지
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
TCP/IP Socket Programming…
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
ACE/POSA Study 첫번째 시간.
Grade Server Team14. Attention Seeker
멀티스레드 Chapter 05. * 학습목표 멀티스레드의 필요성을 이해하고 기본 개념을 익힘.
서버 실습 기말과제 게임소프트웨어 b 이도하 Date :2014/12/11(목)
7가지 방법 PowerPoint에서 공동 작업하는 다른 사용자와 함께 편집 작업 중인 사용자 보기
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
27장. 모듈화 프로그래밍.
Device Driver 임베디드 시스템 I.
RMI Messenger 지도 : 김정배 교수님 조봉진.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 19장 윈도우 기반의 쓰레드 동기화 데이터베이스실험실 석사 2학기 조정희
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바로 만든 채팅 프로그램 임경진 조주경 지도교수님 : 이광세 교수님.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
DK-128 직렬통신 기초 아이티즌 기술연구소
S-Work 2.0 DRM 신규 버전 설치 가이드 SOFTCAMP
( Windows Service Application Debugging )
Chapter7. 도큐먼트와 파일 입출력 이 학 주.
모션 캡쳐와 3D-MAX를 활용한 컴퓨터 애니메이션
2015년 2학년 1반.
Chapter 02. 윈도우 소켓 시작하기.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
다자간 채팅프로그램 김형도 허영민
Numerical Analysis Programming using NRs
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
OpenGL Project F-16 전투기 구현 지시KIN
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
06. 디바이스의 등록과 해제 김진홍
Completion Port기반의 채팅프로그램
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
CODE INJECTION 시스템B 김한슬.
M.B.TEAM 중간 발표 (5.18) 이 제걸 백 인호.
20 XMLHttpRequest.
Presentation transcript:

IOCP 2005/11/10

특징 1. 요청과 응답처리를 같은 쓰레드에서 처리하지 않는다. 2. OVERLAPPED-IO에 기반을 두고 있다.(비동기 처리) 3. 쓰레드 풀을 사용한다.(쓰레드 풀의 효율적인 관리) (정해진 수만큼의 쓰레드가 작업을 처리하도록 한다.) *생성한 쓰레드수가 아니다.* 4. Direct-IO 방식 사용 (꼭 IOCP라서 사용하는건 아니라 생각하는데 우선은 그렇다고 함) 5. Socket뿐만아니라, 모든 디바이스 드라이버(?)에 사용할수 있다. (Socket, File)에만 구현되어 있다고 함…

Overlapped IO (1) (2) 여러 개의 I/O 순차적으로 하지 않고 중복해서 요청이 가능하다. I/O를 요청한 TASK와 I/O를 처리하는 쓰레드가 중복해서 처리된다. (2) IO 요청 I/O 완료를 확인하는 방법 1. Event를 이용하는 방법 2. Callback Function 호출을 이용하는 방법-APC(?) 3. 직업물어보는 방법-poll(?)

연결 생성 쓰레드 m_socListen = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED); bind(m_socListen, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)); listen(m_socListen, 5); m_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, nMaxNumberOfConcurrentThreads); while(true) { clientSocket = WSAAccept(m_socListen, (LPSOCKADDR)&SockAddr, &nLen,0,0); HANDLE h = CreateIoCompletionPort((HANDLE) clientSocket, m_hIOCP, dwCompletionKey, 0); WSARecv(pPerSocketCtx->socket, &(pPerSocketCtx->recvContext->wsaBuf), 1, &dwRecvBytes, &dwFlags, &(pPerSocketCtx->recvContext->overlapped), NULL) }

작업처리 쓰레드 while(true) { BOOL bIORet = GetQueuedCompletionStatus(hCompletionPort, &dwIoSize, (LPDWORD) &lpClientContext, &lpOverlapped, INFINITE); // 얻어온 I/O 정보에 따라서 원하는 정보를 처리합니다. WSARecv(pPerSocketCtx->socket, &(pPerSocketCtx->recvContext->wsaBuf), 1, &dwRecvBytes, &dwFlags, &(pPerSocketCtx->recvContext->overlapped), NULL) }

IOCP와 관련된 중요한 함수들의 ProtoType dwFlagsAndAttributes = FILE_FLAG_OVERLAPPED HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); // IOCP객체를 생성, IOCP객체와 CreateFile등과 같은함수에서 나온 FileHandle과여 연결등에 사용한다. HANDLE CreateIoCompletionPort(HANDLE FileHandle, HANDLE ExistingCompletionPort, ULONG_PTR CompletionKey, DWORD NumberOfConcurrentThreads); // IOCP에 의해서 응답을 처리할수 있도록 분리기 위해서 대기 BOOL GetQueuedCompletionStatus(HANDLE CompletionPort, LPDWORD lpNumberOfBytes, PULONG_PTR lpCompletionKey, LPOVERLAPPED* lpOverlapped, DWORD dwMilliseconds); // IOCP Queue에 임으로 Entry를 추가할때 사용 BOOL PostQueuedCompletionStatus(HANDLE CompletionPort, DWORD dwNumberOfBytesTransferred, ULONG_PTR dwCompletionKey, LPOVERLAPPED lpOverlapped); // 파일(장치)에서 내용읽기 BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); // IOCTL BOOL DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);

참고자료 데브피아 VC++ 이기탁님 강좌 CodeProject – A simple IOCP Server/Client Class MSDN