我们有一个 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 线程。