并行性,几个 1000 个线程

本文关键字:线程 1000 几个 并行性 | 更新日期: 2023-09-27 18:34:32

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

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

Task到底会怎么做?它对这些Threads有某种队列吗?

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

并行性,几个 1000 个线程

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

默认情况下,所有任务都使用内部使用 ThreadPoolTaskScheduler.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 个线程。