Lock-free 작업 큐 스레드풀 구현하기

지난번에 만들었던 스레드풀은 mutex를 이용하여 하나의 작업 큐(공유자원)을 lock-unlock 을 이용하여 각 스레드가 작업을 가져갔습니다. 스레드가 많고 작업 시간이 짧을 수록 더 많은 경쟁을 할 것인데 이로 인해 작업을 처리하는 비용보다 작업을 빼오는 오버헤드가 더 클 것 같습니다. 😨 💡 항상 Lock-free가 빠른 것은 아님! 따라서 벤치마킹 후 성능이 좋은 쪽을 선택해야 합니다. 🚀 Lock-free 작업 큐 구현 기존 스레드풀에서 thread-unsafety 였던 큐를 Lock-free 큐로 변경을 하려고 합니다. 그러기 위해 큐를 직접 구현해야 하는데 큐의 조건은 다음과 같습니다....

2025년 10월 13일 · 7 min · 1305 words · JongBin

멀티 스레드와 std::atomic 객체 공부 - 1

멀티 스레드 환경에서 공유 자원은 항상 mutex의 lock - unlock 을 통해 임계 구역을 만든 후 다뤘었습니다. 그러다가 Lock-free 라는 개념을 접했고 std::atomic 객체를 사용해 보면서 여러 스레드가 동시에 공유 자원에 접근하게 된다면 어떻게 보일지 다시 생각해 보게 됐습니다. 🔍 원자성 💡 Quotation 원자성(原子性, atomicity)은 어떤 것이 더 이상 쪼개질 수 없는 성질을 말한다. 어떤 것이 원자성을 가지고 있다면 원자적(atomic)이라고 한다. 어떠한 작업이 실행될 때 언제나 완전하게 진행되어 종료되거나, 그럴 수 없는 경우 실행을 하지 않는 경우를 말한다....

2025년 10월 10일 · 5 min · 933 words · JongBin

멀티 스레드와 std::Atomic 객체 공부 2

🔬 단순 카운트 테스트 (std::atomic vs mutex) 스레드: 12개 스레드당 카운팅: 5천만개 std::atomic 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include<iostream> #include<iomanip> #include<atomic> #include<thread> #include<mutex> #include<chrono> #include<vector> const size_t THREAD_NUM = 12; const size_t COUNT_NUM = 50'000'000; std::atomic<int> atomic_counter(0); void increse_counter_with_atomic(std::memory_order mo) { for(size_t i = 0; i < COUNT_NUM; i++) { atomic_counter....

2025년 10월 10일 · 3 min · 531 words · JongBin

vcpkg 로 C++ 외부 종속 라이브러리 관리하기

vcpkg 로 C++ 외부 종속 라이브러리 관리하기 💡 Quotation > vcpkg는 플랫폼 간 C/C++ 패키지 관리자입니다. 수천 개의 고품질 오픈 소스 라이브러리에 액세스하여 애플리케이션을 강화하고 내부적으로 프라이빗 구성 요소 컬렉션을 공유합니다. - MSDN 윈도우와 리눅스에서 C/C++ 개발을 위해 CMake 프로젝트를 시작했는데, C/C++ 은 Python의 pip 나 Node.JS의 npm 과 같은 패키지 매니저가 없을까 하다 찾아보니 vcpkg 라는 것이 있길래 사용해 보았습니다. 마이크로소프트가 만들고 리눅스와 윈도우 둘 다 사용 가능하며 CMake 와도 찰떡이라는 말이 있습니다!...

2025년 10월 01일 · 1 min · 193 words · JongBin

AVX 명령어 세트 및 개발 방법

💡 Quotation 고급 벡터 확장(Advanced Vector Extensions,약어:AVX)은 2008년 4월 춘계 인텔 개발자 포럼에서 발표된 x86 명령어 집합의 확장으로 SIMD명령어 집합중의 하나이다. Wikipedia 💡 TIps 단일 데이터 복수 데이터 단일 명령어 SISD SIMD 복수 명령어 MISD MIMD 해당 글에서 설명할 AVX 명령어 셋은 SIMD에 속합니다! CPU-Z 에서 본인이 사용하는 프로세서가 사용할 수 있는 명령어 집합을 볼 수 있는데, 그 중 AVX는 큰 데이터 덩어리를 처리할 수 있는 기술로 적은 연산으로 빠르게 처리가 가능하게 합니다....

2024년 04월 17일 · 2 min · 384 words · JongBin