검색결과 리스트
글
멀티 스레드
멀티 스레드 프로그래밍
1. 프로그램 vs 프로세스
프로그램 : 하드 디스크에 저장되어있는 실행 코드
프로세스 : 수행 중인 프로그램의 인스턴스
Ctrl + F7 = Compile -> .o, .obj
Ctrl + F5 = Compile + Linking -> .exe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #if 0 #include <iostream> using namespace std; int main() { cout << "Hello MultiThread..." << endl; } #endif |
2. 프로세스 구성 요소
1. 커널 오브젝트, PCB(Process Control Block) - 구조체
- 구조체 타입 : 리눅스 = task_struct , 윈도우 = EPROCESS
2. 코드와 데이터를 수용하는 주소 공간(메모리)
: 프로세스는 동립된 자기만의 주소공간을 가지고 있다.
프로세스는 자력으로 수행될 수 없다. 프로세스가 무엇인가를 수행하기 위해서는
프로세스의 컨텍스트 내에서 수행되는 스레드가 존재해야 한다.
OS는 프로세스를 만들때 한개의 스레드를 만들어 준다.
: 메인 스레드, primary thread, initial thread
3. 스레드
: 프로세스 내에서의 제어 흐름(하나의 실행 단위)
4. 스레드의 구성 요소
1) 커널 오브젝트, TCB(Thread Control Block)
리눅스 : task_struct, 윈도우 : ETHREAD
2) 자신만의 스텍을 가지고 있다.
5. 멀티 스레드 모델과 멀티 프로세스 모델
- 멀티 프로세스 모델
장점 : 다른 프로세스에서 잘못된 메모리 접근을 하더라도, 다른 프로세스는 영향을 받지 않음
단점 : 데이터의 공유가 어렵다. 운영체제에서 제공하는 IPC 메커니즘을 이용해야 한다.
- 멀티 스레드 모델
장점 : 같은 프로세스의 컨텍스트 안에서 여러개의 스레드가 동작하는 것이기 때문에 데이터의 공유가 쉽다.
프로세스에 비해 다루는 정보가 적기 때문에, 컨텍스트 스위칭의 비용이 작다.
단점 : 다른 스레드에서 잘못된 메모리 접근을 하는 순간, 프로세스가 종료되기 때문에, 안정성 확보가 어렵다.
데이터의 공유로 인한 경쟁 상태가 발생하기 쉽고, 동기화 매커니즘이 필요하다.
병행성(Concurrency) vs 병렬성(Parallelism)
- 병행성 : 사전적 의미는 어떤 일들이 동시에 발생하는 것이다.
어떤 일들이 동시에 수행되는 것처럼 보이지만, 실제로는 순차적으로 동작하는 것을 의미한다.
병행성은 단일 프로세서 시스템에서 프로세스나 스레드가 동작하는 것
- 병렬성 : 사전적 의미는 어떤 일들이 동시에 진행되는 병행적인 작업이다.
작업들이 동일한 방향으로 교차됨 없이 독립적으로 진행되는 것을 의미한다.
병렬성은 멀티 프로세서 시스템에서 프로세스나 스레드가 동시에 동작하는 것
'프로그래밍' 카테고리의 다른 글
Lua 프로그래밍 (0) | 2015.04.16 |
---|---|
안드로이드 가상 머신 지니모션(Genymotion) 설치 (0) | 2015.04.09 |
파이썬 argparse (0) | 2014.11.08 |
[STL] List (0) | 2014.03.06 |
[STL] Vector (0) | 2014.03.05 |