여러 맥락에서 스레드 개념이 존재한다
자바에도 스레드가 있고 파이썬에도 스레드가 있고
OS 레벨의 스레드가 있다
그럼 우리가 흔히 말하는 스레드는, 기술 면접에서 물어보는 스레드는 어떤 스레드를 말하는 걸까??
이번 글을 이 부분을 다뤄보려고 한다
면접에서 물어보는 스레드는 OS 스레드
결론부터 얘기하면 면접에서 얘기하는 스레드는 보통 OS 레벨의 스레드를 의미한다
OS 레벨의 스레드의 개념과 특징을 간략하게 정리하면 아래와 같다
* CPU 코어에서 실행되는 단위다
* 프로세스는 여러 개의 스레드를 가질 수 있다
* OS에서 관리된다
* OS가 스케줄링한다
* native thread, OS thread, kernel level thread 등등 여러 형태로 불린다
자바에도 있고 파이썬에도 있는 스레드는 무엇?
그렇다면 자바에도 스레드가 있고 파이썬에도 스레드가 있는데 이 친구들은 무엇인가?
개발자가 프로그래밍을 할 때 OS 레벨의 스레드를 직접 사용할 일은 없다고 봐도 무방하다
그럼에도 우리가 스레드를 쓸 수 있는 것은 프로그래밍 언어가 OS 레벨의 스레드를 쓸 수 있도록 제공하기 때문이다
자바의 스레드, 파이썬의 스레드는
OS 레벨의 스레드를 wrapping(포장)해서
개발자가 좀 더 편하게 쓸 수 있는 형태로,
혹은 그 언어의 철학에 맞게 동작하는 형태로 가공된 스레드이다
그러면 우리는, 프로그래밍 언어가 제공하는 스레드를 통해서 OS 스레드를 쓰는 것이다
이렇게 프로그래밍 언어에서 제공하는 스레드를 유저 레벨 스레드라고 부른다
(사람마다 유저 레벨 스레드의 개념을 조금씩 다르게 정의할 수 있겠지만 나는 이렇게 정의하는 것이 제일 이해하기 쉽고 명확하다고 생각한다)
유저 레벨 스레드와 OS 레벨 스레드의 관계
그렇다면 여기서 추가로 중요한 부분이
'유저 레벨 스레드와 OS 레벨 스레드는 어떻게 맵핑되는가?'이다
크게 세 종류의 맵핑이 있는데
* 1:1 관계
* N:1 관계
* N:M 관계
가 있다. (왼쪽이 유저 레벨 스레드 수, 오른쪽이 OS 레벨 스레드 수를 의미한다)
자바의 스레드와 파이썬의 스레드는 OS 레벨 스레드와 1:1 관계이다
즉, 자바에서 스레드를 쓰는 것이나 파이썬에서 스레드를 쓰는 것은 OS 레벨의 스레드를 바로 쓰는 것이라고 볼 수 있고
이때 스레드를 생성하고 스케줄링하는 것은 OS에 위임된다고 볼 수 있다
쉬운코드는 기본에 진심입니다
👉👉👉 여러 종류의 스레드를 설명하는 영상 보러 가기