ThreadPool 대 작업
일부는 .NET 4.0에서 듯이 기본적으로 System.Threading.Tasks
작업 인 새로운 네임 스페이스 를 추가했습니다 . ThreadPool을 사용하여 며칠 동안 만 사용했습니다.
어느 것이 더 많이이고 리소스를 덜 소비하고 있습니까? (아니면 전반적으로 더 나은가요?)
Tasks 네임 스페이스의 목적은 멀티 태스킹 애플리케이션을 더 쉽게 작성하고 더 유연하게 만들 수있는 플러그 형 아키텍처를 제공하는 것입니다.
구현에서는 TaskScheduler
개체를 사용하여 작업 처리를 제어합니다. 여기에는 고유 한 작업 처리를 위해 재정의 할 수있는 가상 메서드가 있습니다. 예를 들어 방법에는
protected virtual void QueueTask(Task task)
public virtual int MaximumConcurrencyLevel
.NET 표준 구현을 둘러싼 싼 래퍼가 있기 때문에 기본 구현을 사용하는 약간의 오버 헤드가있을 것이지만, 이것이 기대하기 때문입니다.
여기에 하나의 단일 코드 에서 여러 작업을 구현하는 사용자 정의 TaskScheduler의 (초안) 구현이 있습니다 .
어느 것이 더 많이이고 리소스를 덜 소비하고 있습니까?
관련이 없지만 차이가 거의 없습니다.
(또는 전반적으로 더 존재)
태스크 클래스는 표준 시작 및 결합을위한 매우 우수한 인터페이스를 제공하고 예외를 전송 사용하기가 더 많은 것입니다. 또한 (제한된) 형태의로드 밸런싱을 지원합니다.
".NET Framework 4부터 TPL은 다중 언어 및 양식 코드를 작성하는 데 선호되는 방법입니다."
http://msdn.microsoft.com/en-us/library/dd460717.aspx
실
베어 메탈은 아마도 사용할 필요가 없을 것입니다. 아마도 LongRunning
Task를 사용하고 그 시설의 이점을 누릴 수 있습니다.
과제
유사 위의 추상화. 이 같은 풀을 사용 (당신이로 작업을 지정하지 않기 LongRunning
때문에, 새로운 경우가있는 경우, 작업을 위해 후드 아래에 생성).
대표 풀
이름에서 알 수 있습니다. 일련의 수의 처리를 처리하는 .NET 프레임 워크입니다. 왜? 코어가 8 개인 CPU에서 값 비싼 CPU 작업을 실행하기 위해 100 개의 많은 작업을 여는 것은 확실히 좋은 생각이 아니기 때문입니다. 프레임 워크는 풀을 유지하고 많은 작업을 수행합니다. (각 작업에서 생성 / 종료하지 않음) CPU가 태우지 않는 방식으로 일부를 메시지로 실행합니다.
좋습니다.
이력서 : 항상 작업을 사용합니다.
실행은 절대적인 것입니다. 항상 작업을 사용하고 습관을 혼자서 처리해야하는 문제가 발생하면 (아마도 1 % 정도) 같은 방식을 사용하는 것이 좋습니다.
그러나 다음 사항에 유의하십시오.
- I / O 바운드 : I / O 바운드 작업 (데이터베이스 호출, 파일 읽기 / 쓰기, API 호출 등)의 경우 일반 작업 을 사용
LongRunning
하지 않고 필요한 경우 작업 또는 사용하지 하지만 일반 작업은 사용하지 않습니다. 몇 개의 경우 사용하는 중이고 풀을 가져갈 차례를 다른 작업이 많은 풀로 연결되기 때문입니다. - CPU 바운드 : CPU 바운드 작업의 경우 작업을 사용하고 행복합니다.
전역은 송신 작업의 중요한 통합입니다.
반드시 즉시 실행되는 것은 아닙니다. 대신 작업에 배치됩니다. 작업은 일반적으로 사용할 수있게 될 때 작업 스케줄러가 작업을 제거 할 때 실행됩니다. 작업 스케줄러는 시스템의 동시성을 정도를 제어하여 전체 처리량을 최적화하려고합니다. 충분한 작업이 있고 작업에 따라 화가 충분히없는 한 프로그램의 성능은 사용 가능한 코어 수에 따라 확장됩니다. 더 많은 기능을 구현합니다.
내가 msdn http://msdn.microsoft.com/en-us/library/ff963549.aspx에서 본 것처럼
작업에 대해 논의 할 또 다른 좋은 점은 ThreadPool을 사용할 때 실행할 때 스레드를 중단하거나 기다릴 방법이 없지만 (스레드 메서드에서 수동으로 수행하지 않는 한) 작업을 사용할 수있는 것 입니다. 내가 틀렸다면 나를 고쳐주세요
ThreadPool 과 Task의 차이점은 매우 간단합니다. 작업을 이해합니다.
ThreadPool 은 기본적으로 사용하는 방식을 관리하고 보조하는 데 도움이됩니다. 즉, 전형적인 풀은 음색의 모음입니다.
작업의 간단한 정의는 다음과 가변적입니다.
태스크 작업은 작업 단위를 비동기 적으로 관리합니다. 쉬운 말로 작업은 새로운 문법을 생성하지 않습니다. 대신 전형적인 풀의 표현을 표현으로 관리합니다. 작업은 함수에 작업을 추가하면 TaskScheduler에 의해 실행됩니다.
참고 URL : https://stackoverflow.com/questions/1774670/c-sharp-threadpool-vs-tasks
'ProgramingTip' 카테고리의 다른 글
Pythonic 방법은 무엇입니까? (0) | 2020.12.05 |
---|---|
C ++ 17에서 보호 된 생성자에 대한 규칙이 변경 되었습니까? (0) | 2020.12.05 |
사실과 이론의 차이? (0) | 2020.12.05 |
Angular의 빌드 및 실행 방법 (0) | 2020.12.05 |
JavaScript에서 요청 헤더 설정 (0) | 2020.12.05 |