반응형
1. Multi-threaded program 을 하는 이유
- 빠른 실행
- 프로세스를 새로 생성에 드는 비요을 절약
- 데이터 공유
- 파일, Heap, static, Code의 많은 부분을 공유
- CPU 보다 효율적으로 활용
- 코어가 여러 개일 경우 코어에 thread를 할당하는 방식
장점
- 대량의 데이터 처리에 적합
- CPU 자원을 효율적으로 사용
- 멀티 프로세스 방식에 비해서 빠른 thread 생성
- 데이터 교환이 쉬움
- IPC(inter process communication)를 사용하지 않고, 데이터를 교환할 수 있음.
단점
- 프로그래밍 난이도 상승
- 비직관적
- 문핵의 흐름을 예상하기 어려움
- 디버깅이 어려움
- 제대로 만들기가 어려움
- 병렬 프로그래밍, 공유 자원 관리는 높은 기술 숙련도를 요구
2. POSIX Thread : pthread
POSIX 스레드는 병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 표준 API다.
- POSIX 표준을 따르는 pthread
- Multi thread 프로그래밍을 위한 API를 제공
- 뛰어난 호환성
- 윈도우를 제외한 모든 Unix계열 운영체제를 지원
- CPU 각 벤더에서도 독자적인 thread API를 제공
- pthread에 비해서 뛰어난 성능을 보여주지만,
- 이식성과 유지/보수 상의 문제로 대부분 pthread를 이용
※ 컴파일을 할 때 -pthread을 추가
Thread 생성
#include <pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
- thread : pthread_t structure
- attr : pthread_attr_t structure
- start_routine : thread 함수
- arg : thread 함수로 넘길 매개 변수
pthread_join : threads가 끝날 때까지 기다림
#include <pthread.h>
int pthread_join(pthread_t thread, void **value_ptr);
- 해당 thread가 종료할 때까지 대기
- thread : pthread_t structure
- value_ptr : return value pointer
pthread_detach : 메인 thread와 분리해서 동작
#include <pthread.h>
int pthread_detach(pthread_t thread);
- 해당 메인 thread로 부터 분리함
- thread 종료와 동시에 자원 회수
3. thread Mutex
mutex init & destory
#include <pthread.h>
pthread_mutex_t mutex;
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
// pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_destory(pthread_mutex_t *mutex);
mutex lock & unlock
#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
반응형
'dev > Linux' 카테고리의 다른 글
Linux 소켓 (socket) (0) | 2022.01.12 |
---|---|
Linux 프로세스 (Process) (0) | 2021.09.10 |
Linux 파일 전송 및 가져오기 SCP 명령어 ( & zip) (0) | 2021.09.04 |