首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行性,几个1000个线程

并行性,几个1000个线程
EN

Stack Overflow用户
提问于 2013-10-08 07:36:04
回答 3查看 825关注 0票数 3

我们有一个网络应用程序,可以监视几个社交媒体,比如twitter/facebook。我们从这些社交媒体收到的数据正在被保存到数据库中。数据很大,为此,我考虑使用Task将数据保存到数据库中。

但我有点担心它是如何工作的。在文档中找不到,如果我为一个用户启动10个线程乘以2000用户会发生什么?或者10.000用户。

Task到底会做什么?它对这些Threads是否有某种队列?

任何关于这件事的意见都会很感激。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-08 08:09:07

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-10-08 07:53:55

您应该使用异步编程模型(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

票数 4
EN

Stack Overflow用户

发布于 2013-10-08 07:40:14

Task使用Thread来完成这项工作。

Tasks被排队到ThreadPool

要回答您的问题,您需要尝试一下,看看应用程序是否处理。

您可能可以共享线程,这样就不会是10*2000线程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19241780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档