.NET 4에는 새로운 이름 공간인 System.Threading.Tasks가 포함되어 있으며, 여기에는 스레딩 기능을 추상화하는 클래스들이 포함되어 있습니다. 백그라운드에서 ThreadPool을 사용하세요. 작업은 완료되어야 할 단위의 작업을 나타냅니다. 이 유닛의 작업은 별도의 스레드에서 실행될 수도 있고, 작업을 동기식으로 시작할 수도 있으며, 이 경우 메인 튜닝 스레드를 기다려야 합니다. 작업을 사용하면 추상화 계층이 생길 뿐만 아니라 기본 스레드에 대한 많은 제어권도 얻을 수 있습니다. 업무는 해야 할 업무 일정에 있어 많은 유연성을 제공합니다. 예를 들어, 작업 완료 후 어떤 작업을 해야 하는지 '연속 작업'을 정의할 수 있습니다. 이것이 성공적인 작업과 실패의 차이를 만들 수 있습니다. 또한, 작업을 계층 구조로 배열할 수 있습니다. 예를 들어, 부모 작업은 새로운 자식 작업을 생성할 수 있습니다. 이로 인해 부모 작업을 취소하면 그 하위 작업도 취소되는 의존성이 생깁니다.
요즘은 작업 실행 방식을 사용하는 것이 인기가 많고, 고성능이며, 작업 성능이 어디에 있는지 저는 잘 모르겠습니다.
저는 직접 Task와 Thread를 테스트해봤는데, Task가 매우 느려서 성능에 큰 영향을 준다고 느꼈고, 테스트 코드는 다음과 같습니다:
이 메서드를 1000번 반복한 후, 메서드가 100밀리초 동안 블록을 진행하며, 테스트 결과는 다음과 같습니다:
결과:
스레드 실행은 188밀리초가 소요됩니다
작업 실행은 14,671밀리초가 소요됩니다
두 차량의 속도 차이는 78배입니다!!
작업이 매우 느리고, 왜 이런 현상이 발생하는지 모르겠습니다. 테스트 코드에 문제가 있는 건가요, 아니면 다른 이유가 있는 건가요? 왜 이런 일이 일어나는지 설명해 주셨으면 합니다...
|