并行性,几个 1000 个线程
本文关键字:线程 1000 几个 并行性 | 更新日期: 2023-09-27 18:34:32
我们有一个网络应用程序,可以监控多个社交媒体,如Twitter/Facebook。我们从这些社交媒体收到的数据正在保存到数据库中。数据很大,因此我正在考虑使用Task
将数据保存到数据库中。
但我对它的工作原理有一些担忧。在文档中找不到如果我为 1 个用户启动 10 个线程乘以 2000 个用户会发生什么?或者可能是 10.000 个用户。
Task
到底会怎么做?它对这些Threads
有某种队列吗?
对此事的任何启发将不胜感激。谢谢!
Task
只是一个可以调度到TaskScheduler
队列的委托的包装器。 Task
不会创建任何线程。在内部调用task.Start()
时,它会调用 taskScheduler.QueueTask(Task)
方法。
默认情况下,所有任务都使用内部使用 ThreadPool
的TaskScheduler.Default
。您可以在创建TaskFactory
时指定自定义任务计划程序 - 此类具有接受TaskScheduler
参数的构造函数。当前的时间表始终可通过TaskScheduler.Current
物业使用。
您应该使用异步编程模型 (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
Task
使用Thread
来完成工作。
Tasks
排队到ThreadPool
。
要回答你的问题;你需要尝试一下,看看应用程序是否能够应付。
您可能会共享线程,因此它不会是 10*2000 个线程。