스레드(Thread)란 무엇일까?
※ CS지식이 많이 부족하여 이론적인 부분이 이해도 어렵고 설명도 주관적인게 많습니다. 틀린부분은 지적해주시면 감사하겠습니다.
여기저기 면접을 보면서 '스레드가 무엇인지 설명해주세요' 라는 질문을 받았습니다.
기존에 컴퓨터 조립에 관심이 있어 나무위키 읽으면서 놀다가 문득 읽어본 기억이 나서 아는대로 설명했습니다만...정석대로 알지는 못하고 있어 확실히 알기위해 정리해봅니다.
스레드의 사전적 의미는 아래와 같습니다.
어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.
스레드를 알기전에 프로세스와 프로그램에 대해 먼저 알아야할텐데요.
먼저 프로그램은 저장공간에 저장되어있는 파일을 뜻합니다. 그리고 이 프로그램을 실행하면서 메모리를 차지하는 때부터를 프로세스라고 할 수 있습니다.
쉬운 예시로 우리가 스타크래프트를 설치만 해두면 이건 프로그램, 실행해서 메모리상에 있으면 프로세스라고 부를 수 있겠습니다.
흔히 말하는 멀티 프로세스는 하나의 응용 프로그램을 작동시키기 위한 프로세스를 여러개의 프로세스를 사용하는 것입니다.
스레드는 이런 프로세스의 작업단위라 할 수 있습니다.
프로세스에 할당되는 스레드의 갯수에 제한은 없지만 반드시 한개 이상의 스레드를 가지게 됩니다.
하나 이상의 작업은 해야지 뭐라도 할테니까요.
그리고 여기서 멀티 스레드는 프로세스에서 작동되는 스레드가 여러개임을 뜻합니다.
프로세스와 스레드의 관계를 비유하자면, 빵집과 제빵사의 관계로 생각할 수 있겠습니다.
프로세스를 늘리는 것보다 스레드를 늘리는 것이 더 적은 자원을 사용합니다.
공장을 늘리는 것보단 노동자를 늘리는게 쉽듯이요.