- 모든 코드는 C# 10을 기준으로 작성돼 있습니다. 따라서 C# 9에 추가된 최상위문 형식에 따라 생략된 부분이 있습니다.
- 스레드(thread): 하나의 실행 흐름. 스레드끼리는 서로 독립적. 스레드는 격리된 환경인 하나의 프로세스에서 실행.
- 단일 스레드 프로그램: 한 프로세스 안에 하나의 스레드
- 다중 스레드 프로그램: 한 프로세스 안에 여러 스레드 실행. 동일 실행 환경에서 동일 메모리를 공유.
- 공유 상태(shared state): 여러 스레드가 메모리를 공유하는 상태.
(예: 한 스레드가 저장하면 다른 한 스레드가 표시)
- 스레드 생성하기: Thread, Start
- System.Threading 사용
- 단일 스레드 생성이 기본값(가비지 컬렉터 등을 제외하고)
- 가장 간단한 스레드 생성자 예시
- 멀티 코어에서는 실제로 병렬로 실행되나 단일 코어에서는 작업 시간을 조각 내 각 스레드에 할당.
- 작업이 끝나면 스레드는 종료. 종료된 스레드는 다시 실행하지 못함.
- 윈도우 스토어 앱 등에서는 사용 불가능. Task로만 생성 가능.
Thread newThread = new (WriteX); // delegate 하나를 받아 새로운 스레드 생성 newThread.Start() // WriteY() 실행 // 주 스레드 작업 for (int i = 0; i < 1000; i++) Console.Write("O"); // 새로운 스레드가 하는 작업 static void WriteX() { for (int i = 0; i < 1000; i++) Console.Write("X"); } /* 실행하면 스레드가 각각 병렬로 실행되면서 O와 X가 번갈아가면서 나온다.(실행할 때 마다 다름) 출력 예시: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXOOOOOOOOOOOOOOOOOXOXXXXXXXXXXXXXXXX XXXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXXXXXOOOOOOOOOX XXXXXXXXXXXXXXXXOOOOOOXXXOOOOOOOOOOOOOOXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ... */
- Thread 내 속성
- IsAlive: 스레드 실행 여부 속성
- Name: 스레드 별 이름 설정 혹은 확인. 최초 한 번만 설정 가능(변경 불가)
- Thread.CurrentThread : 실행되고 있는 스레드를 반환하는 정적 속성
- Thread 내 메서드
- Join: 스레드의 작업이 끝날 때까지 기다리도록 하는 메서드
- 정적 메서드
- Thread.Sleep: 실행되고 있는 현재 스레드를 멈추는 메서드. 멈출 때 즉시 다른 스레드에게 CPU를 넘겨줌.
- Thread.Yield: Sleep과 멈추는 것은 같으나 같은 프로세서의 스레드에게만 양보함.
'C#' 카테고리의 다른 글
Visual Studio 2022 필수 무료 확장 + 몇 가지 팁. (1) | 2022.12.18 |
---|---|
[C#] 배열 Array, List에서 뒤에서부터 인덱스 접근하고 싶을 때 (0) | 2022.08.26 |
[Notion] Rx.Net in Action 요약 정리 (0) | 2022.03.10 |
C# 제네릭(Generics) 1 (0) | 2020.11.30 |
C# 이벤트(Events) 접근자와 수정자 (0) | 2020.11.27 |