2009-12-03 121 views
-4

这个场景是让数据库中有10 TB的对象,每个对象有1 TB。我必须使用多少个线程

我有一个名为MATCH()的函数,它有一个查询对象,它的返回类型是double,在这个函数中我有数学计算。我有一个检查,如果结果的值在0〜1之间,然后我有:

double[ ] Result=new double[eg 1000]

  • 我如何能做到这一点,因为该系统具有 2 GB RAM - 性能。
  • 我应该锁哪个部分,使用 互斥或使用线程池? - 线程 安全
  • 我可以同时运行多少个线程 ,特别是比较 到BackgroundWorker

请给我该程序的架构。 (ED:我认为只是忽略这一行

+1

1)找到shift键。 2)添加分段符。 3)做你自己的作业。 4)带回一个具体的问题 – tster 2009-12-03 05:39:32

+0

说实话,这对我来说似乎不是功课。 – 2009-12-03 05:42:33

+0

它可能不像学校里的作业,但它仍然是'plz send me teh codez' – tster 2009-12-03 05:44:55

回答

0

如果这是一个没有UI的应用程序,请使用ThreadPool。您可以设置要使用的线程的最大数量,因为这看起来像是一个专门的应用程序,所以应该对它进行修改,直到完全正确。

ThreadPool examples here (MSDN)

+0

“如果这是一个没有UI的应用程序,请使用ThreadPool。”为什么它不应该有UI来使用ThreadPool()? – claws 2009-12-03 06:10:38

+0

它与使用BackgroundWorker相反,我应该更加清楚。 BackgroundWorker在非UI环境(性能和控制智能)和线程池中使用是没有意义的。 – 2009-12-03 07:13:45

1

这里有一些关于线程的东西可以帮助你。

实际上,每个CPU不需要多于一个线程,更多线程只会在调度器上增加更多的开销。但是,线程经常会阻塞,就像通过数据库查询数据一样,所以每个cpu只保留一个线程是不可行的,您可能需要更多的时间才能使CPU使用率达到100%。

也就是说,在你的场景中,有多于一个或两个线程在同一个数据库上查询数据对你来说无济于事,因为数据库是开销。我会考虑只创建一个或两个同时向数据库查询数据的线程,或者更好地使用异步模式并使用Command.BeginExecute ...()方法,并且只允许少数几个并行查询。查询完成后,您现在可以对您必须对数据执行的处理进行排队,这可以在.Net ThreadPool上执行,也可以在每个cpu只包含一个线程的自定义线程池中完成,如果数据的处理花费的时间超过查询它。

相关问题