Presentation is loading. Please wait.

Presentation is loading. Please wait.

Linux/UNIX Programming APUE (Thread Programming)

Similar presentations


Presentation on theme: "Linux/UNIX Programming APUE (Thread Programming)"— Presentation transcript:

1 Linux/UNIX Programming APUE (Thread Programming)
문양세 강원대학교 IT대학 컴퓨터과학전공

2 스레드(Threads)란? 프로세스 내의 제어 흐름(a flow of control within a process)
APUE (Thread Programming) 프로세스 내의 제어 흐름(a flow of control within a process) 앞서 공부한 프로세스는 단일 스레드 프로세스로 볼 수 있다. 다중 스레드 프로세스에서는 하나의 프로세스 내에 여러 제어(control)가 존재한다. 스레드는 CPU 이용의 기본 단위로서 아래 정보들로 구성된다. 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 등 동일 프로세스의 여러 스레드는 코드 영역, 데이터 영역, 운영체제 자원 (예: 열린 파일, 시그널)을 공유한다. 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나 이 상의 작업을 실행할 수 있다.

3 단일 vs 다중 스레드 프로세스 APUE (Thread Programming)

4 다중 스레드 프로그램 (1/2) 현대 운영체제의 대다수 소프트웨어 패키지는 다중 스레드를 지원한다.
APUE (Thread Programming) 현대 운영체제의 대다수 소프트웨어 패키지는 다중 스레드를 지원한다. 웹 브라우저의 스레드 이용 예 이미지와 텍스트를 표시(display)하는 스레드 1개 네트워크로부터 데이터를 읽어는 스레드 1개 워드 프로세서의 스레드 이용 예 그래프를 표시(display)하는 스레드 1개 사용자의 키 스트로크에 응답하는 스레드 1개 스펠링, 문법 검사를 수행하는 스레드 1개

5 다중 스레드 프로그램 (2/2) 웹 서버 많은 운영체제 커널들이 현재 다중 스레드 기반이다.
APUE (Thread Programming) 웹 서버 단일 스레드 웹 서버: 한 클라이언트 요청에 대한 서비스를 완료할 때까지 다른 클라이 언트 요청에 대한 서비스를 기다려야 한다. 다중 프로세스 웹 서버: 스레드가 일반화되기 전에 사용되었으며, 새로운 프로세스를 생 성하여 추가적인 클라이언트 요청을 처리한다.  프로세스 생성 오버헤드 발생 다중 스레드 웹 서버: 프로세스에 비해 오버헤드가 작은 스레드를 생성하여 여러 클라이 언트에 대해 동시에 서비스한다. 많은 운영체제 커널들이 현재 다중 스레드 기반이다. 여러 스레드들이 커널 내에서 동작한다. 각 스레드는 장치를 관리하거나 인터럽트를 처리하는 등 특정 작업을 수행한다.

6 Mach C-threads, Solaris Threads Windows: Win32 Threads
주요 스레드 라이브러리 APUE (Thread Programming) Linux/Unix POSIX Pthreads Mach C-threads, Solaris Threads Windows: Win32 Threads JVM: Java Threads (Thread class, Runnable interface)

7 POSIX Pthreads 스레드 생성/동기화에 대한 POSIX 표준(IEEE 1003.1c) API를 제공한다.
APUE (Thread Programming) 스레드 생성/동기화에 대한 POSIX 표준(IEEE c) API를 제공한다. 스레드 동작에 대한 API 명세를 제공할 뿐이며, 이의 구현은 각 운영체제 에 따라 다르게 구현될 수 있다. 솔라리스, Mac OS X 등 여러 Linux/Unix 운영체제에서 공통 지원한다. Pthreads 라이브러리 컴파일 옵션: -lpthread Pthreads system calls

8 Simple Example 1 (1/4) 스레드 기능: 1에서 n까지의 합을 구함 𝒔𝒖𝒎= 𝒊=1 𝑵 𝒊
APUE (Thread Programming) 𝒔𝒖𝒎= 𝒊=1 𝑵 𝒊 스레드 기능: 1에서 n까지의 합을 구함

9 Simple Example 1 (2/4) APUE (Thread Programming)

10 Simple Example 1 (3/4) APUE (Thread Programming)

11 Simple Example 1 (4/4) APUE (Thread Programming) 𝒔𝒖𝒎= 𝒊=1 𝑵 𝒊

12 Simple Example 2 (1/4) 스레드 10개를 생성하고, 각각은 Hello world!를 출력함
APUE (Thread Programming) 스레드 10개를 생성하고, 각각은 Hello world!를 출력함

13 Simple Example 2 (2/4) APUE (Thread Programming)

14 Simple Example 2 (3/4) APUE (Thread Programming)

15 Simple Example 2 (4/4) APUE (Thread Programming)

16 Creating Threads – pthread_create()
APUE (Thread Programming) #include <pthread.h> int pthread_create( pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); thread: 생성된 스레드의 식별자를 리턴할 변수 attr: 생성할 스레드의 속성 (default: NULL) start_routine: 스레드가 수행할 함수 arg: 스레드 함수에 주어질 argument

17 More Example 1 (1/3) 동일 함수인데 서로 다른 메시지를 출력하는 두 개의 스레드
APUE (Thread Programming) 동일 함수인데 서로 다른 메시지를 출력하는 두 개의 스레드

18 More Example 1 (2/3) APUE (Thread Programming)

19 More Example 1 (3/3) APUE (Thread Programming)

20 Pthreads 동작 절차 APUE (Thread Programming) 앞서 두 개의 스레드가 생성되는 경우의 예제

21 More Example 2 (1/3) 네 개의 스레드가 다소 복잡한 수학 계산을 수행하는 예제
APUE (Thread Programming) 네 개의 스레드가 다소 복잡한 수학 계산을 수행하는 예제

22 More Example 2 (2/3) APUE (Thread Programming)

23 More Example 2 (3/3) APUE (Thread Programming)

24 데이터 공유와 동기화 APUE (Thread Programming) 스레드간 데이터 공유는 전역 변수(global variable)나 공유 메모리 (shared memory)를 사용하여 가능하다. 동기화는? mutex, conditional variables, semaphore 등을 사용하여 해결한다. 관심 있는 학생은 Linux System Programming(Robert Love)을 참조하세요.

25 Homework#13 APUE (Thread Programming)


Download ppt "Linux/UNIX Programming APUE (Thread Programming)"

Similar presentations


Ads by Google