use*_*018 2 .net c# parallel-processing task-parallel-library
我是第一次使用并行任务而不是使用传统的线程池.在我的应用程序中,我允许用户输入开始完成作业的任务数.(工作可能非常大).我注意到,如果我允许任何超过10个左右的任务,应用程序就会开始挂起,实际上由于使用了资源,性能会下降.
我想知道处理器数量和最大任务量之间是否存在任何关联,这样我就可以限制用户pc的最大任务量,这样就不会减慢它的速度.
小智 6
不,主要是因为没有任务的定义.任务可能是CPU密集型(限制类似于核心*因子),IO密集型(限制可能非常低),或网络密集型有限的资源(不喜欢同时处理1000个请求).
因此,作为程序员,您需要使用大脑并提出一个概念,然后对其进行验证,然后将其放入您的程序中,具体取决于任务实际是什么以及预见到瓶颈的位置.这样的计划可能很复杂 - 非常复杂 - 但大多数时候它很简单.
TPL将自动更改任务的调度方式,并随着时间的推移添加或删除ThreadPool线程.这意味着,如果有足够的时间和类似的工作,默认行为应该改进为最佳选择.
默认情况下,它将使用比核心更多的线程来启动,因为许多任务不是"纯CPU".鉴于您看到额外的任务导致速度减慢,您可能有资源争用(通过锁定),或者您的任务受CPU限制,并且具有比处理器核心更多的任务将导致速度减慢.如果这会有问题,您可以创建一个自定义TaskScheduler来限制一次允许的任务数,例如LimitedConcurrencyTaskScheduler.这允许您将任务数限制为纯CPU方案中的处理器数.
如果您的任务受其他因素(如IO)的约束,那么您可能需要进行配置以确定并发计划任务的数量与吞吐量之间的最佳平衡,尽管这将是系统特定的.
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |