상세 컨텐츠

본문 제목

시간절약을 위한 Thread

유용한 skill

by 송연어 2020. 2. 26. 20:54

본문

Thread를 설명하기 앞서 Process부터 이해가 필요합니다. 프로세스는 컴퓨터에서 "연속적으로 실행되고 있는 프로그램" 이라고 정의됩니다. 예를 들어, 핸드폰을 사용할 때 우리는 음악을 들으면서 다른 갖가지 앱을 실행할 수 있습니다.

 

 

이때, 음악 앱에 프로세스 하나가 할당되고 다른 앱에 또 프로세스 하나가 할당됩니다. 이렇듯 프로세스는 한가지 작업을 수행하는 행동을 일컫습니다. 프로세스 내부에는 code, data, stack, heap 등의 영역이 존재하며 각각의 프로세스는 독립적이고 서로에게 관여할 수 없습니다. 서로에게 관여하기 위해선 프로세스 간의 통신을 사용해야합니다. 이외에도 여러가지 특징이 있습니다. 찾아보세요.

 

프로세스는 내부에 최소 1개 이상의 thread를 가지고 있습니다. thread는 stack만 따로 할당받고 나머지 code, data, heap 등은 다른 thread들과 공유합니다.

 

thread는 프로세스 내부에서 실제로 작업을 수행하는 주체입니다. 요 녀석이 여러 개 있으면 작업을 병렬적으로 처리할 수 있습니다. thread가 2개 이상이면 multi- thread라고 불려집니다. 

 

multi- thread는 thread간에 자원을 공유하여 자원낭비를 방지합니다. 또한, thread가 작업 중일때, 다른 thread가 응답을 할 수 있는 등의 장점이 있습니다. 이 thread의 개수는 컴퓨터의 cpu개수와 동일해야 각각 하나의 작업을 수행할 수 있습니다. 그 이상이 되면 thread들이 서로 작업을 번갈아가며 수행합니다.

 

이때, context switching이라는 것이 발생합니다.  context switching은 현재까지의 작업 상태나 다음 작업에 필요한 각종 데이터를 저장하고 읽어오는 작업을 뜻합니다. context switching이 높아질수록 작업이 더뎌지죠. 단순한 작업은 그냥 하나의 thread를 이용하는 것이 효과적일 것으로 보입니다.

 

 

 

 

 

참고

 

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

http://tcpschool.com/java/java_thread_multi

댓글 영역