쓰레드 기본 개념
C#는 멀티스레딩을 통해 코드의 병렬 실행을 지원합니다.
스레드는 다른 스레드와 동시에 실행할 수 있는 독립적인 실행 경로를 나타냅니다.
쓰레드 작동 방식
멀티스레딩은 내부적으로 스레드 스케줄러에 의해 관리되며, 일반적으로 CLR (Common Language Runtime)이 운영 체제에 위임하는 기능입니다. 스레드 스케줄러는 모든 활성 스레드에 적절한 실행 시간을 할당하고, 대기하거나 차단된 스레드(예를 들어, 독점 락 또는 사용자 입력을 기다리는 스레드)가 CPU 시간을 소비하지 않도록합니다.
단일 프로세서 컴퓨터에서 스레드 스케줄러는 일반적으로 활성 스레드 간에 실행을 빠르게 전환하는 "타임 슬라이싱"을 수행합니다. Windows에서는 타임 슬라이스가 일반적으로 몇십 밀리초 정도로 크며, 실제로 스레드 간의 컨텍스트 전환 오버헤드(일반적으로 몇 마이크로초 정도)보다 훨씬 큽니다.
쓰레드 풀링
스레드를 시작할 때마다 새로운 개별 로컬 변수 스택과 같은 것들을 구성하는 데 수백 마이크로초가 소요됩니다. 또한 각 스레드는 기본적으로 약 1MB의 메모리를 사용합니다. 스레드 풀은 이러한 오버헤드를 공유하고 재활용하여 성능 패널티 없이 멀티스레딩을 매우 세부적으로 적용할 수 있도록 합니다. 이것은 다중 코어 프로세서를 활용하여 "분할 및 정복" 스타일로 계산 집약적인 코드를 병렬로 실행할 때 유용합니다.
Task
Task는 작업 병렬 라이브러리(TPL)에서 소개된 것으로, 비동기 작업에 대한 추상화를 제공합니다. 작업은 병행으로 실행할 수 있는 작업 단위를 나타내며, 시스템 리소스를 효율적으로 활용할 수 있도록 합니다. 작업은 런타임에서 관리되는 스레드 풀 스레드(thread pool threads)에 의존하며, 이로 인해 가벼우면서 확장 가능한 특성을 갖습니다.
요약
Task는 Thread Pool Thread에서 실행되고
Thread는 그렇지 않습니다. (이게 핵심)
=> 따라서 자동으로 최적화 해주는 Task가 더 좋고 운영체제 쓰레드와 직접 연관되어 있는 Thread는 개발자가 직접 관리해야 하기에 더 번거로워서 Task를 사용하면 된다. (이 외에도 다양한 이유가 있지만 이것만 알아도 될듯 합니다)
https://stackoverflow.com/questions/13429129/task-vs-thread-differences
https://www.albahari.com/threading/
'C#' 카테고리의 다른 글
[C#] 구글 프로토 버퍼 .proto 문법 정리 (0) | 2024.04.23 |
---|---|
[C#] Extension Method (0) | 2023.12.12 |