728x90
반응형
멀티스레드
#include <iostream>
#include <thread>
#include <vector>
void doWork(int id) {
std::cout << "스레드 " << id << " 작업 시작\n";
// 스레드가 수행할 작업
std::cout << "스레드 " << id << " 작업 종료\n";
}
int main() {
std::vector<std::thread> threads;
// 4개의 스레드 생성
for (int i = 0; i < 4; ++i) {
threads.emplace_back(doWork, i);
}
// 모든 스레드가 종료될 때까지 대기
for (auto& thread : threads) {
thread.join();
}
return 0;
}
멀티 스레드의 장점
자원의 효율적 사용: 스레드들이 메모리와 자원을 공유하기 때문에 오버헤드가 적음
빠른 컨텍스트 스위칭: 프로세스보다 가벼운 스레드는 컨텍스트 스위칭이 빠름(메모리 관련 처리를 하지 않기 때문)
https://guks-blog.tistory.com/m/entry/C-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%8A%A4%EC%9C%84%EC%B9%98%EB%9E%80
멀티 스레드의 단점
동기화 문제: 여러 스레드가 같은 자원에 접근할 때 발생할 수 있는 동기화 문제
하나의 스레드 오류가 전체에 영향: 하나의 스레드에서 문제가 발생하면 전체 프로세스에 영향을 줄 수 있음
멀티 프로세스
#include <iostream>
#include <vector>
#include <unistd.h>
#include <sys/wait.h>
void doProcessWork(int id) {
std::cout << "프로세스 " << id << " 작업 시작\n";
// 프로세스가 수행할 작업
std::cout << "프로세스 " << id << " 작업 종료\n";
}
int main() {
std::vector<pid_t> processes;
// 4개의 프로세스 생성
for (int i = 0; i < 4; ++i) {
pid_t pid = fork();
if (pid == 0) { // 자식 프로세스
doProcessWork(i);
exit(0);
} else if (pid > 0) { // 부모 프로세스
processes.push_back(pid);
}
}
// 모든 프로세스가 종료될 때까지 대기
for (pid_t pid : processes) {
waitpid(pid, NULL, 0);
}
return 0;
}
멀티 프로세싱의 장점
안정성: 각 프로세스가 독립된 메모리 공간을 가지므로, 하나의 프로세스 오류가 다른 프로세스에 영향을 주지 않음
격리: 프로세스 간의 격리로 인해 보안이 강화
멀티 프로세싱의 단점
오버헤드: 프로세스 간의 통신(IPC)에 더 많은 오버헤드가 발생
자원 사용: 멀티 스레드에 비해 더 많은 메모리와 CPU 시간을 차지
결론
멀티 스레드는 자원의 효율적 사용과 빠른 응답 시간이 필요한 경우에 적합
멀티 프로세싱은 애플리케이션의 안정성과 프로세스 간의 격리가 중요한 경우에 적합
개발자는 애플리케이션의 요구 사항과 특성을 고려하여 적절한 모델을 선택해야 함
728x90
반응형
'C++' 카테고리의 다른 글
[MongoDB] 외부 연결 설정안될 때 해결법 (0) | 2024.04.12 |
---|---|
[C++] 컨텍스트 스위치란 (0) | 2024.03.17 |
[C++] 조건문, 스위치문을 줄이기 의한 방법 (0) | 2024.03.16 |
[CPP] 분할 구현 (0) | 2024.03.15 |
[C++] Merger Sort 병합 정렬 (0) | 2024.03.15 |