Chapter 4 Multi-Threaded Socket

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

11장 스레드.
Socket Programming 소개.
김태원 심재일 김상래 강신택. 김태원 심재일 김상래 강신택 인터넷 통신망의 정보를 제공하는 서비스 인터넷의 자원 및 정보는 NIC가 관리 IP주소 또는 도메인으로 정보 검색 이용자 및 통신망 관한 정보를 제공.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
최윤정 Java 프로그래밍 클래스 상속 최윤정
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Visual C++ Programming Tree Control/MultiThread
MultiThread.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
Linux서버를 이용한 채팅프로그램 지도 교수님 : 이형원 교수님 이 름 : 이 은 영 학 번 :
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
8장. 원격지 시스템 관리하기.
스레드란? 멀티 태스킹(muli-tasking)는 여러 개의 애플리케이션을 동시에 실행하여서 컴퓨터 시스템의 성능을 높이기 위한 기법 그림23-1. 병철 처리의 예.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
Chapter 06 프로세스와 예약작업 관리 Solaris 1. 프로세스 관리
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Sungkyunkwan University OS Project Dongkun Shin
Chapter 03 : 서블릿 ( Servlet ) 개요. chapter 03 : 서블릿 ( Servlet ) 개요.
속성과 리스너 초기화 파라미터 외 파라미터에 대해 이해한다. 리스너를 생성해보고 사용에 대해 이해한다.
Chapter 5 UDP Socket 소켓 프로그래밍.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
멀티스레드 Chapter 05. * 학습목표 멀티스레드의 필요성을 이해하고 기본 개념을 익힘.
인터넷응용프로그래밍 JavaScript(Intro).
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
2. 프로세스 관리 프로세스 중단과 재시작 중단과 재시작을 추가한 프로세스 상태 변화
System.Threading Process / Thread SD50 – C# & .NET Platform.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
데이터 동적 할당 Collection class.
12강. 컨트롤러 컨트롤러 클래스 제작 요청 처리 메소드 제작 뷰에 데이터 전달
클러스터 시스템에서 효과적인 미디어 트랜스코딩 부하분산 정책
Chapter 17. 스레드.
AT MEGA 128 기초와 응용 I 기본적인 구조.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
발표자 : 이지연 Programming Systems Lab.
System Security Operating System.
9 브라우저 객체 모델.
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Completion Port기반의 채팅프로그램
Java의 정석 제 8 장 예외처리 (Exception handling) Java 정석 남궁성 강의
CODE INJECTION 시스템B 김한슬.
Power Java 제23장 스레드.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
7 생성자 함수.
2. 프로세스 B 안우진 - 운영체제 -.
중간 결과 보고 ( Server & Client )
20 XMLHttpRequest.
Presentation transcript:

Chapter 4 Multi-Threaded Socket 소켓 프로그래밍

Multi-Threaded Socket 스레드 개념 .NET 에서의 스레딩 스레드 동기화 멀티스레드 소켓 예제 프로그램 실습

스레드 개념 이전까지의 서버는 한번에 하나의 클라이언트만을 처리 여러 클라이언트를 처리할 수 있는 방법이 필요 멀티 스레드 서버를 이용 운영체제 시스템 개념 프로그램 – 명령의 집합 프로세스 – 메모리에 있는 프로그램 (실행된 프로그램) 스레드 가벼운 프로세스 같은 프로세스내의 모든 스레드는 같은 메모리 공간을 공유 프로세스는 스레드와는 달리, 자신만의 메모리 공간을 가짐

프로세스와 스레드 (1/2) 용어 프로세스(process) 스레드(thread) 주 스레드(primary thread) 메모리를 비롯한 각종 리소스를 담고 있는 컨테이너(container)로서 정적인 개념 스레드(thread) 실제 CPU 시간을 할당받아 수행되는 실행 단위로서 동적인 개념 주 스레드(primary thread) main() 또는 WinMain() 함수에서 시작되는 스레드로, 프로세스가 시작할 때 생성 컨텍스트 전환(context switch) CPU와 운영체제의 협동으로 이루어지는 스레드 실행 상태의 저장과 복원 작업

프로세스와 스레드 (2/2) 컨텍스트 전환 과정 CPU ① ② 스레드① 레지스터 스레드②

스레드 개념 윈도우 작업관리자를 통해 스레드 수 확인

스레드 조작 – 우선 순위 (1/3) 용어 스레드 스케줄링(thread scheduling) 윈도우가 각 스레드에게 CPU 시간을 적절히 분배하기 위한 정책 우선순위 클래스(priority class) 프로세스 속성으로, 한 프로세스가 생성한 스레드는 모두 동일한 우선순위 클래스를 가짐 우선순위 레벨(priority level) 스레드 속성으로, 한 프로세스에 속한 스레드 사이에서 상대적인 우선순위를 결정할 때 사용 기초 우선순위(base priority) 우선순위 클래스와 우선순위 레벨을 결합한 값으로, 스레드 스케줄링에 사용

스레드 조작 – 우선 순위 (2/3) 우선 순위 클래스 REALTIME_PRIORITY_CLASS(실시간) HIGH_PRIORITY_CLASS(높음) ABOVE_NORMAL_PRIORITY_CLASS(보통 초과; 윈도우2000/XP/2003) NORMAL_PRIORITY_CLASS(보통) BELOW_NORMAL_PRIORITY_CLASS(보통 미만; 윈도우2000/XP/2003) IDLE_PRIORITY_CLASS(낮음)

스레드 조작 – 우선 순위 (3/3) 우선 순위 레벨 THREAD_PRIORITY_TIME_CRITICAL THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_ABOVE_NORMAL THREAD_PRIORITY_NORMAL THREAD_PRIORITY_BELOW_NORMAL THREAD_PRIORITY_LOWEST THREAD_PRIORITY_IDLE

.NET 에서의 스레딩 예제 프로그램 : SimpleThread.cs Thread 클래스 4개의 생성자 public Thread(ThreadStart) public Thread(ParameterizedThreadStart) public Thread(ThreadStart, int) public Thread(ParameterizedThreadStart, int) 스레드를 생성하기 위해서는 스레드로 실행할 부분의 코드를 따로 분리하여 메서드로 구성해야 함 위의 스레드 생성자는 이 스레드 메서드에 대한 대리자를 인자로 가짐 대리자 대리자란 C나 C++ 에서의 함수 포인터와 같은 역할 스레드 메서드가 인자를 가지지 않는 경우 ThreadStart 대리자를 사용 스레드 메서드가 인자를 가지는 경우 ParameterizedThreadStart 대리자를 사용 마지막 두 개의 생성자는 최대 스택 사이즈를 지정할 수 있는 정수형 인자를 가짐

.NET 에서의 스레딩 스레드 생성 및 시작 (인자가 없는 경우) class SomeClass { void SomeThreadMethod() // Some task to be performed here } void NormalMethod() ThreadStart ts = new ThreadStart(SomeThreadMethod); Thread t = new Thread(ts); t.Start();

.NET 에서의 스레딩 기본적으로 스레드의 생성은 아래와 같이 대리자를 생성 후, 그 대리자를 인자로 하여 스레드를 생성할 수 있지만, 다음과 같이 메서드 이름을 스레드 생성자의 인자로 하여 단축해서 생성이 가능함 ThreadStart ts = new ThreadStart(SomeThreadMethod); Thread t = new Thread(ts); t.Start(); Thread t = new Thread(SomeThreadMethod); t.Start();

.NET 에서의 스레딩 스레드 생성 (단축) class SomeClass { void ThreadWithoutParameter() { // Some task } void ThreadWithParameter(Object data) { ObjParam param = (ObjParam)data; } void NormalMethod() { Thread t1 = new Thread(ThreadWithoutParameter); t1.Start(); // object of user created type ObjParam ObjParam param = new ObjParam(); Thread t2 = new Thread(ThreadWithParameter); t2.Start(param);

스레드 동기화 스레드는 동시에 실행되는 것처럼 보이지만 실제로는 백그라운드 상에서 문맥교환이 아주 빠른 속도로 이루어짐 스레드는 동시에 실행되는 것처럼 보이지만 실제로는 백그라운드 상에서 문맥교환이 아주 빠른 속도로 이루어짐 스레드의 실행순서는 랜덤하게 이루어짐 특정한 경우에는 이러한 랜덤 실행 순서가 바람직하지 못할 수도 있음 경쟁 상태 발생 스레드 동기화가 요구됨

스레드 동기화 예제 프로그램 : RaceCondition.cs 같은 프로세스에 속한 모든 스레드는 같은 메모리 공간을 공유 같은 프로세스에 속한 모든 스레드는 같은 메모리 공간을 공유 이러한 특징으로 인해 스레드 간의 정보교환이 쉽게 이루어질 수 있음 하지만, 한 스레드가 다른 스레드에 의해 사용되고 있는 변수를 수정할 경우 문제가 발생 경쟁 상태 발생 경쟁 상태를 예방하기 위해 스레드의 동기화가 필요 크리티컬 섹션 동시에 접근할 수 없는 코드 구역

스레드 동기화 스레드 동기화 기술 크리티컬 섹션에 대한 스레드의 접근을 동기화 Exclusive Lock (lock) 한 스레드가 락을 획득하면, 나머지 스레드는 차단 락이 해제될 때까지 대기 예제 프로그램 : RaceConditionLock.cs Monitor 메서드 호출과 try…finally 블록을 이용하여 락을 획득하고 해제 Monitor.Enter(), Monitor.Exit() 예제 프로그램 : RaceConditionMonitor.cs Mutual Exclusion (Mutex) 뮤텍스 알고리즘 이용 mutex.WaitOne(), mutex.ReleaseMutex() 예제프로그램 : RaceConditionMutex.cs

멀티 스레드 소켓 리스너 소켓 프로세스 흐름

멀티 스레드 소켓 TCP 소켓 리스너는 접속을 수락한 후 다시 리스닝 상태로 돌아감 소켓을 종단점에 바인딩 한 후, 들어오는 요청에 대해 리스닝을 시작 클라이언트가 서버로 접속을 시도하면, 서버는 이 요청을 수락하고 클라이언트와 통신을 하기 위한 새로운 소켓 객체를 생성 접속 수락 후에 리스너 소켓은 다시 리스닝 상태로 돌아가서 또 다른 접속 요청을 대기 단일 스레드 환경에서는 서버가 한 클라이언트의 요청을 처리하기에 바빠서 또 다른 요청을 처리할 수 있는 제어방법을 가지고 있지 않음 이러한 한계를 극복하기 위해 멀티 스레드 소켓을 구현

멀티 스레드 소켓 멀티 스레드 서버

멀티 스레드 소켓 멀티 스레드 서버 크게 두 부분으로 구성 리스닝 접속 수락 후 클라이언트와의 통신 처리 클라이언트와의 통신을 위해 소켓을 생성하여 통신을 처리하는 부분을 스레드 메서드로 구현 리스너는 접속 수락 후 클라이언트와의 통신을 위한 새로운 소켓을 생성한 후, 리스닝 상태에 남아 또 다른 요청이 있을 경우 동일한 작업을 수행

예제 프로그램 실습 향상된 에코 서버: EchoServerMT.cs 예제 프로그램 이전 챕터의 싱글 스레드 클라이언트를 이용하여 실습 하나 이상의 클라이언트 실행 예제 프로그램 DirectoryServer.cs DirectoryClient.cs