3

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

但我对它的工作原理有些担心。在文档中找不到如果我为 1 个用户启动 10 个线程乘以 2000 个用户会发生什么?或者可能有 10.000 个用户。

具体会Task做什么?它有一些队列Threads吗?

对此事的任何启示都将不胜感激。谢谢!

4

3 回答 3

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

于 2013-10-08T07:53:55.017 回答
4

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

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

于 2013-10-08T08:09:07.867 回答
1

ATask使用 aThread来完成工作。

Tasks正在排队等候ThreadPool

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

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

于 2013-10-08T07:40:14.657 回答