서버프로그래밍
-
TLS(Thread Local Storage)C++/C++ 멀티스레드 2022. 11. 8. 20:47
안녕하세요. 오늘은 Thread Local Storage에 대해서 알아보겠습니다. 개념 게임을 만드는 예를 들어볼게요. 멀티스레드 환경에서 스레드들은 DB관리도 하고, 클라이언트 세션을 처리하기도 하고, 게임로직을 처리하기도 하는 등 다양한 작업을 처리하게 됩니다. 그런데, 이 스레드들은 우리가 생각하는 것처럼 이상적으로 동작하지 않습니다. 우리는 스레드가 공평하게 여러 작업에 투입되길 바라는데 현실은 한, 두개의 작업에 많은 스레드가 몰리게 됩니다. 멀티스레드 프로그래밍의 이상과 현실이라고 유명한 사진이 있습니다. 여튼 이렇게 하나의 작업에 여러 스레드가 몰리게 되면 비효율적인 상황이 발생합니다. Lock때문인데요. 멀티스레드 환경에서는 특정 작업을 처리할 때 Lock을 걸고 작업을 하는 경우가 많습니..
-
C++, Sleep을 이용한 Lock구현C++/C++ 멀티스레드 2022. 10. 10. 11:52
이전 포스팅에서는 spinlock을 구현해봤다. spinlock은 lock을 얻기위해서, 기한없는 대기를 하는 방법이다. https://bethetitan.tistory.com/9 C++ SpinLock구현 SpinLock은 앞선 포스팅에서 말한 존버메타 lock이다. 즉, lock을 다른 스레드가 사용중이면, 그 앞에서 lock이 풀릴때까지 계속 기다리는 것이다. 이거를 한 번 구현해보자. 들어가기에 앞서, 멀티스 bethetitan.tistory.com spinlock을 이용할 경우, CPU를 더 효율적인 곳에 사용하지 못하고, 가만히 놀게 하는 것과 다름없으므로, lock을 가진, thread가 lock을 빨리 해제하지 않는 경우에는 비효율적이라는 단점이 있다. 그래서 오늘은 lock이 잠겨있다면,..