Java

Thread에 대한 기초 개념 정리

OneMoreThing 2024. 1. 17. 23:08

Thread란 무엇일까?

Thread를 얘기하기전에 Process에 대해서 먼저 얘기해야한다. 프로세스는 간단하게 얘기하면 운영체제(OS)위에서 돌아가고 있는 프로그램을 의미한다. 각각의 프로세스는 메모리공간을 할당받아서 실행되고 있다. 그렇다면 쓰레드는 무엇일까? 쓰레드는 하나의 프로세스 안에서 진행되는 프로그램의 흐름이라고 생각할 수 있다. 비유를 통해 이해해보자.

운영체제를 하나의 큰 회사라고 생각해보자. 회사 안에는 여러부서(프로세스 : 진행중인 프로그램)가 있다. 각각의 부서들은 사무실의 공간(메모리)을 할당받아 업무를 진행한다. 그리고 각각의 부서안에는 팀장(main 쓰레드)과 팀원(이외의 쓰레드)들이 존재하여 업무를 처리한다. 쓰레드는 구체적으로 작업을 하고 있는 일꾼이라고 볼 수 있다. 팀장이 팀원들에게 업무를 지시하듯, 자바에서 메인쓰레드(main메소드) 는 다른 쓰레드 객체를 만들고 일을 시킬 수 있다. 이를 그림으로 나타내면 아래와 같을 것이다.

비유가 꽤 괜찮은 것 같다. 부서의 팀장도 업무를 분담해준뒤 본인의 업무를 하지 않는가? 쓰레드도 동일하다. 메인 쓰레드(main 메소드)는 다른 쓰레드들에게 업무를 나눠준 뒤 원래 하던 흐름대로 자기의 일을 처리해나간다.

 

싱글 쓰레드? 멀티 쓰레드?

위의 예시를 이해했다면 싱글 쓰레드와 멀티 쓰레드를 이해하는게 어렵지 않을 것이다. 싱글 쓰레드는 모종의 이유로 팀원들이 없어서 혼자서 일을 처리하는 팀장이라 생각하면 된다. 멀티 쓰레드는 위의 예시에서 처럼 여러 팀원들이 일을 하고 잇는 상황인 것이다. 비유를 통해 멀티쓰레드를 잘 구현하는 것이 중요한 이유를 알 수 있다. 혼자서 처음 부터 끝까지 일을 하는 것은 다 같이 업무를 분담해서 일을 하는 것보다 속도 느릴 것이다. 쓰레드 역시 마찬가지이다. 여러가지 일을 동시에 처리하게 하여 성능을 끌어올릴 수 있다. 하지만 업무분담을 사려깊게 하지 않으면 팀원들간에 문제가 생길 수 있는 것처럼 쓰레드도 마찬가지이다. 이후의 내용은 추후 글에서 다루도록하자.