1. 메모리 계층 구조1.1. 캐시 메모리 (L1, L2, L3 캐시)L1 캐시: - CPU 코어에 가장 가까운 캐시 - 보통 32KB ~ 64KB 크기 - 접근 속도: ~4 사이클 - 일반적으로 명령어 캐시와 데이터 캐시로 분리됨 L2 캐시: - L1보다 크고 느림 - 보통 256KB ~ 512KB 크기 - 접근 속도: ~10 사이클 - 대부분의 경우 코어별로 독립적 L3 캐시: - 가장 큰 온칩 캐시 - 보통 수 MB ~ 수십 MB 크기 - 접근 속도: ~40 사이클 - 일반적으로 모든 코어가 공유 캐시의 역할:1) 자주 사용되는 데이터를 빠르게 접근할 수 있는 위치에 저장2) 메모리 접근 지연 시간 감소3) 메모리 대역폭 병목 현상 완화 멀티스레딩에서의 주의점: - 캐시 ..
1. 경쟁 상태 (Race condition)경쟁 상태는 둘 이상의 스레드가 공유 데이터에 동시에 접근하여 예측할 수 없는 결과를 초래하는 상황을 말한다. ex)#include #include int num = 0;void Increment() { for (int i = 0; i 위 예시에서 `num`은 race condition의 대상이 된다.두 스레드가 동시에 이 변수를 증가시키려고 하면, 일부 연산이 손실될 수 있다. 2. 임계 영역(Critical Section)임계 영역은 여러 스레드가 동시에 접근해서는 안 되는 공유 자원을 접근하는 코드 영역을 말한다.임계 영역에 대한 접근은 상호 배제(mutual exclusion)를 통해 동기화되어야 한다. 임계 영역의 특성 :- 한 번에 하나의 ..
1. 스레드 생성 방법C++에서 스레드를 생성하는 방법 1) std::thread 클래스 사용:#include #include void ThreadFunction() { std::cout 2) 람다 함수 사용:#include #include int main() { std::thread t([](){ std::cout 3) 함수 객체(Functor) 사용:#include #include class ThreadFunctor {public: void operator()() { std::cout 2. 스레드 생명주기1) 생성(Created): std::thread 객체가 생성되면 새로운 스레드가 시작됨2) 실행 가능(Runnable): 스레드가 실행될 준비가 되었지만, ..
1. 프로세스와 스레드 프로세스 (Process)실행 중인 프로그램의 인스턴스특징: - 독립된 메모리 공간 - 운영체제로부터 자원을 할당받음 - 최소 하나의 스레드(메인 스레드) 포함 - 독립적인 메모리 공간을 가짐(코드, 데이터, 힙, 스택) 스레드 (Thread)프로세스 내에서 실행되는 흐름의 단위 특징: - 같은 프로세스 내의 스레드들은 메모리 공간을 공유 - 빠른 생성과 컨텍스트 스위칭 - 병렬 처리 가능 - 스택만 독립적으로 갖고 나머지는 프로세스 내에서 공유 2. 멀티스레딩의 장단점 장점1) 성능 향상: 여러 작업을 동시에 처리하기 때문에 프로그램의 실행 속도가 빨라짐2) 응답성 향상: 한 스레드의 작업이 길어져도 프로그램이 계속 실행되기 때문에 사용자의 응답성이 증가3) 자..
그동안 공부했던 멀티스레딩 관련 내용을 블로그에 정리해두려고 합니다. 제가 서버 공부를 C++로 해서 여기서 다룰 모든 예시는 C++ 기반입니다. 목차 1. 멀티스레딩 기초 2. 스레드 생성과 관리 3. 데이터 동기화 기초 4. 메모리 구조와 멀티스레딩 5. 동기화 기법: Atomic 연산 6. 동기화 기법: Lock 7. 동기화 기법: Mutex 8. 데드락(Deadlock) 9. 스핀락(Spinlock) 10. Condition Variable 11. 고급 동기화 기법 12. 스레드 풀(Thread Pool) 독학중이라 틀린 내용이 있을 수도 있고 부족한 내용이 있을수도 있습니다. 댓글로 남겨주시면 내용에 반영하겠습니다.