我们有一个网络应用程序,可以监视几个社交媒体,比如twitter/facebook。我们从这些社交媒体收到的数据正在被保存到数据库中。数据很大,为此,我考虑使用Task将数据保存到数据库中。
但我有点担心它是如何工作的。在文档中找不到,如果我为一个用户启动10个线程乘以2000用户会发生什么?或者10.000用户。
Task到底会做什么?它对这些Threads是否有某种队列?
任何关于这件事的意见都会很感激。谢谢!
发布于 2013-10-08 08:09:07
Task只是一个可以调度到TaskScheduler队列中的委托的包装器。Task不会创建任何线程。当您在内部调用task.Start()时,它会调用taskScheduler.QueueTask(Task)方法。
默认情况下,所有任务都使用内部使用TaskScheduler.Default的ThreadPool。您可以在创建TaskFactory时指定自定义任务调度程序--这个类有一个接受TaskScheduler参数的构造函数。当前调度程序始终可以通过TaskScheduler.Current属性使用。
发布于 2013-10-08 07:53:55
您应该使用异步编程模型(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
发布于 2013-10-08 07:40:14
Task使用Thread来完成这项工作。
Tasks被排队到ThreadPool。
要回答您的问题,您需要尝试一下,看看应用程序是否处理。
您可能可以共享线程,这样就不会是10*2000线程。
https://stackoverflow.com/questions/19241780
复制相似问题