繁体   English   中英

Parallel.ForEach,Task.Factory和N个线程

[英]Parallel.ForEach, Task.Factory and N threads

我知道之前已经有人问过这个问题,但我仍然不知道在这种情况下该使用什么。

我需要针对一个我知道一次可以处理16个请求的Web服务进行100次调用(不是,如果获得更多请求,它将失败)

我认为Parallel.ForEach适用于更底层的CPU密集型调用-它将决定最适合多少线程。 Task.Factory使用线程池,因此线程数可能少于16(更多)

当然,我可以编写自己的线程池,但是在这种情况下没有更明显的选择吗?

我会用Parallel.ForEach但指定ParallelOptionsMaxDegreeOfParallelism设置为16,你给你想要的并行度的非常明确地表明这种方式。

如果您使用Task.Factory我认为可以假设您获得16个以上的并发任务,尽管如果您使用异步IO,则无论如何都不需要16个并发线程

您可能想看一下TPL数据流 -我没有专门研究如何轻松划分使用者,但是由于它直接针对生产者/消费者方案,因此如果您无法创建16个使用者,我会感到惊讶。只需拨打100个电话。

或者,当然,您可以创建全部使用相同BlockingCollection 16个线程,其中包含100个调用的数据。 这样可以保证并行度。

请注意,为了实际在同一时间对同一HTTP主机同时进行16个调用,您可能需要调整app.config的<connectionManagement>部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM