我们有一个 Web 应用程序,可以监控多个社交媒体,如 twitter/facebook。我们从这些社交媒体收到的数据被保存到数据库中。数据很大,因此我正在考虑使用Task
's 将数据保存到数据库中。
但我对它的工作原理有些担心。在文档中找不到如果我为 1 个用户启动 10 个线程乘以 2000 个用户会发生什么?或者可能有 10.000 个用户。
具体会Task
做什么?它有一些队列Threads
吗?
对此事的任何启示都将不胜感激。谢谢!
我们有一个 Web 应用程序,可以监控多个社交媒体,如 twitter/facebook。我们从这些社交媒体收到的数据被保存到数据库中。数据很大,因此我正在考虑使用Task
's 将数据保存到数据库中。
但我对它的工作原理有些担心。在文档中找不到如果我为 1 个用户启动 10 个线程乘以 2000 个用户会发生什么?或者可能有 10.000 个用户。
具体会Task
做什么?它有一些队列Threads
吗?
对此事的任何启示都将不胜感激。谢谢!
您应该使用异步编程模型 (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
ATask
只是可以安排到TaskScheduler
' 队列的委托的包装器。Task
不创建任何线程。当您在task.Start()
内部调用时,它会调用该taskScheduler.QueueTask(Task)
方法。
默认情况下,所有任务都使用TaskScheduler.Default
内部使用ThreadPool
. 您可以在创建时指定自定义任务调度程序TaskFactory
- 此类具有接受TaskScheduler
参数的构造函数。当前调度程序始终可通过该TaskScheduler.Current
属性获得。
ATask
使用 aThread
来完成工作。
Tasks
正在排队等候ThreadPool
。
回答你的问题;您需要尝试一下,看看应用程序是否可以应对。
您可能可以共享线程,因此它不会是 10*2000 线程。