Thread
Thread
는 어플리케이션이 실행되는 흐름의 기본 단위- 각
Thread
는 프로그램 코드의 실행 흐름을 나타내며, 독립적으로 실행될 수 있음. Thread
는 프로세스 내에서 여러 작업을 동시에 수행하는데 사용되며, 이를 통해 프로그램의 병렬성이 향상
Process
Process
운영 체제에서 실행 중인 프로그램을 나타내는 단위.Thread
는Process
내에서 실행되는 각각의 작업의 실행을 나타내며, 하나의Process
에서 여러 개의Thread
가 존재할 수 있음.
Thread 특징
- 독립성
- 각
Thread
는 독립적으로 실행될 수 있음. - 하나의
Thread
작업이 실패하더라도 다른Thread
는 영향을 받지 않고 계속 실행.
- 각
- 경량성
Thread
는Process
내에서 실행되며,Process
의 자원을 공유하므로Process
보다 가볍습니다.Process
는 독립된 메모리 공간을 가지지만,Thread
는 같은Process
내에서 메모리를 공유 합니다.- 병렬성
- 여러
Thread
가 동시에 실행될 수 있음. - 프로그램은 여러 작업을 동시에 수행하여 전체적인 성능을 향상 시킬 수 있음.
- 공유자원
Thread
는 같은Process
내에서 실행되기 때문에Process
내의 자원을 공유함.- 데이터를 쉽게 공유하고 효율적으로 작업 가능.
- 응답성
- 하나의
Thread
가 작업을 수행하는 동안에도 다른Thread
가 실행될 수 있음. (비동기..?) - 동시다발적으로 응답하므로 더 빠르게 데이터 처리가 가능함.
- 하나의
- 통신성
Thread
간의 통신은Process
간 통신보다 더 간단함.Thread
는 같은Process
내에서 직접적으로 메모리를 공유하기 때문에 별도의 통신 매커니즘이 필요 없음.
- 동기화
- 여러
Thread
가 공유 자원에 동시에 접근할 때 데이터 일관성을 유지하기 위해 동기화 필요. locks
과 같은 동기화 매커니즘을 사용해야함.
- 여러
Multi Threading
- 앞에서 계속 언급한 하나의
Process
내에서 여러Thread
가 동시에 실행되는 것을 의미함. - 각
Thread
는 독립적으로 실행되면서 공유된 자원을 활용함. Multi Thread
을 통해 여러 작업을 동시에 처리하여 전체적인 성능을 향상시킬 수 있음.
Thread Pool
Thread Pool
은 미리 생성된Thread
의 집합을 말하며,Thread
들을 관리하고 재사용하는 매커니즘- 일반적으로 프로그램이 시작될 때
Thread Pool
이 생성되며, 필요한 작업이 생기면Thread Pool
에서Thread
를 가져와 작업을 처리함. Thread Pool
덕분에Thread
의 생성 및 소멸에 따른 오버헤드를 줄일 수 있고, 효율적인 작업이 가능함.
예제
main
메서드는 자동으로 Thread
하나를 부여 받는다. 신규로 Thread
를 생성하여 GetName()
메서드를 실행시키게 한다.
Thread.Sleep()
대기를 의미하고 main Thread
는 5초의 대기 시간을 갖는다.
결과적으로 main Thread
가 대기하는 동안 다른 new Thread
는 계속 작업을 처리 한다.
new Thread
는 Thread.Sleep(500);
으로 main Thread
보다 10배 가량 대기 시간이 적다.
결과적으로 최초 1번은 작업 처리가 비슷할지 몰라도 대기 시간 차이로 인해서 new Thread
연속 적으로 처리가 된다.
또한 main Thread
와 new Thread
병렬적으로 작업을 처리하므로 Multi Threading
개념도 포함 되어 있는 것이다.
Thread thread = new Thread(new ThreadStart(TacoTest.GetName));
thread.Start();
for (int i = 0; i < 5; i++)
{
Console.WriteLine("메인 쓰레드" + i);
Thread.Sleep(5000);
}
public static class TacoTest
{
public static void GetName()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("신규 쓰레드" + i);
Thread.Sleep(500);
}
}
}
/* 결과값
신규 쓰레드0
메인 쓰레드0
신규 쓰레드1
신규 쓰레드2
신규 쓰레드3
신규 쓰레드4
메인 쓰레드1
메인 쓰레드2
메인 쓰레드3
메인 쓰레드4
*/
결론
Thread
는 하나의 프로세스를 처리하기 위한 일꾼.Thread
는 여러개가 존재할 수 있다. 각각의 일꾼은 여러가지 작업들을 하나씩 맞아서 처리 할 수 있다.Thread Pool
은 일꾼들의 집합소.Multi Thread
는 일꾼들이 같이 일하는 것.