并行性,几千个线程

时间:2013-10-08 07:36:04

标签: c# multithreading parallel-processing

我们有一个网络应用程序,可监控多个社交媒体,如twitter / facebook。我们从这些社交媒体收到的数据正被保存到数据库中。数据很大,因此我考虑使用Task来将数据保存到数据库中。

但我对它的运作方式有些担忧。在文档中找不到如果我为1个用户开始10个线程乘以2000个用户会发生什么?或者可能是10.000个用户。

Task到底会做什么?它是否有这些Threads的某种队列?

对此事的任何启示都会非常感激。谢谢!

3 个答案:

答案 0 :(得分:4)

您应该使用异步编程模型(APM)来执行此操作。

通过使用APM,您可以避免创建数百个线程。

在幕后,APM可以使用I/O Completion Ports在数据到达或发送时提供回调,这意味着不必浪费线程。

请参阅此处了解详情:

http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx

http://msdn.microsoft.com/en-us/library/vstudio/hh300224.aspx

答案 1 :(得分:4)

Task只是一个可以安排到TaskScheduler队列的委托的包装器。 Task不会创建任何线程。当您在内部调用task.Start()时,它会调用taskScheduler.QueueTask(Task)方法。

默认情况下,所有任务都使用内部使用TaskScheduler.Default的{​​{1}}。 您可以在创建ThreadPool时指定自定义任务计划程序 - 此类具有接受TaskFactory参数的构造函数。当前的scheduller始终可以通过TaskScheduler属性获得。

答案 2 :(得分:1)

Task使用Thread来完成工作。

Tasks排队等候ThreadPool

回答你的问题;你需要尝试一下,看看应用程序是否应对。

您可能可以共享线程,因此它不会是10 * 2000个线程。