쓰레드가 도대체 뭔가요?
코딩을 처음 배울 때 가장 어려웠던 단어는 쓰레드였습니다.
쓰레드란 말만 나오면 가슴속이 답답했습니다.
으아, 도대체 쓰레드가 뭐냐고.
해커와 화가에서 폴 그레이엄이 절대 틀리는 일이 없다며 극찬한 공동 창업자 (웜 바이러스의 창시자) 로버트 모리스의 쓰레드 설명
교수님, 선배님들은 다들 저렇게 실을 그리며 코드가 흘러가는 흐름 같은 거라고 말해줬습니다.
‘아니, 코드가 뭘 어딜 흘러가냐고.’
회사에 들어가서야 깨달았습니다.
멀티 쓰레드 프로그램을 실제로 디버깅해보면서.
_beginthreadex 함수와 EnterCriticalSection 함수를 사용해서 버그를 고치는 과정에서 번쩍 깨달음이 왔던 기억이 납니다.
그때까지 저는 스택이 프로세스 당 1개 있는 건 줄로 잘못 알고 있었습니다.
쓰레드 스택이란 표현을 듣는 순간 느낌이 왔습니다.
_beginthreadex를 통해 쓰레드를 하나 생성할 때마다 스택이 함께 생성된다는 것.
그 스택 크기는 1MB라는 것을 알게 되었습니다.
(커널 모드로 전환될 땐 고작 12KB의 커널 스택을 사용한다는 것도 나중에 알게 됐습니다.)
아, 이제야 뭔지 알 것 같아.
지역 변수를 사용하면 멀티 쓰레드에서 문제가 없다느니, 쓰레드 로컬 스토리지가 뭐니 하는 말들이 그제야 이해가 되기 시작했습니다.
어제부터 쓰레드(SNS)를 시작했는데, 쓰레드란 단어를 볼 때 마다 고통스러워하던 옛날 생각이 나서 주절거려 봤습니다. (웃음)
쓰레드 주소는 여기입니다.
함께 읽으면 좋은 글: