我必须使用多少个线程

时间:2009-12-03 05:36:01

标签: c# multithreading memory cpu

场景是在数据库中可以说1 TB对象,每个10 mb。

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

double[ ] Result=new double[eg 1000]

  • 我该怎么做,就像系统一样 2 GB RAM - 性能。
  • 我应该锁定哪个部分,使用 互斥或使用线程池? - 线程 安全
  • 我可以运行多少个线程 同时,具体比较 到BackgroundWorker

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

2 个答案:

答案 0 :(得分:1)

以下是一些可以帮助您的线程。

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

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

答案 1 :(得分:0)

如果这是没有用户界面的应用程序,请使用ThreadPool。你可以设置要使用的最大线程数,因为这看起来像是一个专门的应用程序,所以修改它直到你说得恰到好处。

ThreadPool examples here (MSDN)