C#-用于数据库密集型应用程序的多核线程

C#-用于数据库密集型应用程序的多核线程,c#,database,multithreading,multicore,C#,Database,Multithreading,Multicore,我有一个应用程序,需要在数据库端进行一些验证。每个过程都要经过数据库验证(搜索大约有600万条记录的表),然后再经过一些Lucene索引搜索器(索引是根据这600万条记录表构建的)。 由于这些步骤对于要传递的每一行项目都是不相交的,所以我考虑使用多核线程。(每条线在一根线上大约需要1/2分钟) 在C#中使用多核有哪些选项? 是否有一些好的资源/第三方库(我看过Jeff Ritcher的PowerThreading),一些好的教程 我假设我需要在N个核心机器中执行一些线程池 目前,处理100条生产

我有一个应用程序,需要在数据库端进行一些验证。每个过程都要经过数据库验证(搜索大约有600万条记录的表),然后再经过一些Lucene索引搜索器(索引是根据这600万条记录表构建的)。 由于这些步骤对于要传递的每一行项目都是不相交的,所以我考虑使用多核线程。(每条线在一根线上大约需要1/2分钟)

在C#中使用多核有哪些选项? 是否有一些好的资源/第三方库(我看过Jeff Ritcher的PowerThreading),一些好的教程

我假设我需要在N个核心机器中执行一些线程池

目前,处理100条生产线大约需要40秒,希望能在10秒左右完成

谢谢…

你调查过了吗


它是为并行化任务而从头设计的。

如果您想要四个速度提升因子,并且有四个内核,那么您需要做的就是避免任务之间的依赖关系,这听起来是可行的。我想您会发现,实际上您需要运行比内核更多的线程,因为在任何给定的时间,许多线程都会被阻塞等待I/O。因此,我建议,无论使用哪种方法,都要确保可以轻松地使用不同的线程数对其进行基准测试。

Simple应该允许您访问多核。您将不得不考虑线程池的大小,因为您的任务看起来也有很多IO

我现在没有足够的bandwith来使用F。我会调查的。但是,你有什么C#解决方案可以推荐吗?让你的线程尽可能地与相互依赖性分离。这只是一个重复吗?这听起来像是“如何在.NET中编写多线程代码?”搜索“多线程[c#]”会找到很多有用的信息。例如,请参阅示例技术的公认答案。不知何故,我觉得SQL部分尚未优化,现在开始应用程序多线程还为时过早。当您指的是简单线程时,您指的是线程池?我在双核机器上尝试了线程池,但仍然获得了相同的性能!还记得Chris关于解耦相互依赖性所说的吗?我承认我没有试过检查多线程是否使用多核,但这对Java来说是正确的,特别是对于Python来说,由于全局锁,这是不正确的。同步和阿姆达尔定律()在任何情况下都适用。是的,除非您明确禁止,否则多个线程将分布在所有内核中。如果线程独立工作,那么应该获得与内核数量几乎成比例的加速。如果您没有得到,则可能是出了问题,很可能是全局锁。如果计算是独立的且受IO限制的,那么您可能能够获得比内核数更大的加速。嗯,最简单的方法是使用线程池,如所示。