【发布时间】:2013-06-18 10:42:47
【问题描述】:
好的,我对我应该做什么和如何做有点困惑。我知道并行编程和线程的理论,但这是我的情况:
我们在给定文件夹中有许多日志文件。我们在数据库中读取这些日志文件。通常读取这些文件需要几个小时才能读取,因为我们以串行方法执行此操作,即我们遍历每个文件,然后为每个文件打开一个 SQL 事务并将日志插入数据库,然后读取另一个并执行相同操作。
现在,我正在考虑使用并行编程,这样我就可以消耗 CPU 的所有内核,但是我仍然不清楚是否对每个文件使用线程,这会对系统产生什么影响吗?我的意思是,如果我创建 30 个线程,那么它们会在单核上运行还是在 Parallel 上运行?我怎样才能同时使用它们?如果他们还没有这样做?
编辑:我使用的是单服务器,具有 10K 硬盘速度和 4 核 CPU,具有 4 GB RAM,没有网络操作,SQL Server 与 Windows 2008 作为操作系统在同一台机器上。 [如果有帮助,也可以更改操作系统 :)]。
编辑 2:我根据您的反馈进行了一些测试,这是我在具有 4 GB RAM 的 i3 四核 CPU 上找到的结果
CPU 保持在 24-50% CPU1,CPU2 保持在 50% 以下,CPU3 保持在 75%,CPU4 保持在 0% 左右。是的,我打开了 Visual Studio、eamil 客户端和许多其他应用程序,但这告诉我应用程序没有使用所有内核,因为 CPU4 仍然是 0%;
RAM 始终保持在 74% [测试前约为 50%],这就是我们设计读取的方式。所以,不用担心
HDD 保持 READ/Write 或使用值保持低于 25% 甚至在正弦波中飙升至 25%,因为我们的 SQL 事务首先存储在内存中,然后在内存达到阈值时写入磁盘,再说一遍,
所以这里的所有资源都没有得到充分利用,因此我认为我可以分配工作以提高效率。又是你的想法。谢谢。
【问题讨论】:
-
在更换硬件之前尝试增强软件,应该会少一些麻烦;)
-
是的,我正在重写软件以提高速度 :) 因此这个问题。
-
无意冒犯,但从你的问题来看,你似乎并不了解并行编程和线程的理论。
-
好吧,svick 也许你是对的,我的知识有限,但你能分享一些想法,以便我也能提高我的理解吗?
-
@SumitGupta 尝试从头开始教授并行编程超出了单个 SO 问题的范围。这个话题太宽泛了。
标签: c# .net multithreading parallel-processing