实现的功能是:逐条读入iis日志文件,把其中客户ip转换成域名,然后写入文件。
多线程的话是用了10个,分块读取,写入各自的文件。单线程机器是 赛扬3.0, 2G 内存
多线程机器是 赛扬2.8, 1G 内存 运行的结果是:
单线程: 从10:00运行到17:47 生成文件1.43M
多线程:从16:43运行到17:47 生成文件2.86M,其中最快的已经700多K。读写的代码都是一样的,为什么某个线程的效率也要比单线程的快呢?
多线程的话是用了10个,分块读取,写入各自的文件。单线程机器是 赛扬3.0, 2G 内存
多线程机器是 赛扬2.8, 1G 内存 运行的结果是:
单线程: 从10:00运行到17:47 生成文件1.43M
多线程:从16:43运行到17:47 生成文件2.86M,其中最快的已经700多K。读写的代码都是一样的,为什么某个线程的效率也要比单线程的快呢?
解决方案 »
- 关于代码延迟。有没有能简约点的方法。
- 如何将excel的数据导入到datagridview?
- 请高手帮忙解释一下这段代码的意思?我是新手有太多都看不懂?
- 请问winform 的datagridview有页尾吗?
- textbox绑定数据的问题
- 菜鸟请教!
- WinForm中如何打印WOrd,Excel文件
- Thread.Abort() 问题:为什么有个对话框一闪而过?
- 使用Microsoft.Office.Interop.Excel.dll出现问题
- 求助:最近一直在学C# 但是一点基础都没有就开始做那些小东西 好多意思都不懂。郁闷
- 求助!!!关于相对路径问题,急!!!在线等待......
- 关于枚举用法的一个简单问题!
楼主是要逐条读日志文件,也就需要做大量的i/o操作,从cpu启动硬盘到数据传入内存相对cpu来讲需要大量时间
单线程也只能等等等,而多线程则可以并行做转换,效率上是不如相提并论的至于楼主效率问题,本人觉得硬盘传输速率是这个问题的主要因素把,毕竟不是
做大量的科学运算,大部分时间都浪费在i/o这上面了
当然还有其他众多因素。
也不赞同“多线程对单CPU无意义”,系统都是按时间片分配给每个线程,大家都是一样
不过线程越多,在内存中需要保护的现场就越多
单线程时,硬盘先等CPU寻址,然后硬盘写,CPU等硬盘写完,再计算下一次读写的地址
而多线程时,CPU首先不会等硬盘,而硬盘也就不用等CPU了。也就是说,单线程是读一行,写一行,然后再读一行,再写一行,每一步都是等上一步完成再进行下一步;而多线程,是读一行,写一行,同时读了下一行,甚至几行的内容(理论上,读取时间应该快于写入时间吧)。当然这里说的下一行,是下一块的某行,并不是真正的紧跟着的下一行。说到这里,突然想到,也许有人会说,单CPU的话,多线程其实质还是一次读一条写一条的单步操作吧。我觉得,这个就要说硬盘的缓存问题了。CPU将数据先发送到硬盘缓冲区里,然后写入就不管了,单线程的这个时候,会等写完,而多线程会开始读取了。至于磁盘的工作原理,磁头柱面缓存等等的内容,查阅相关资料吧。硬盘的工作可不见得完全是单线程的。呵呵。至于说,“某个线程的效率也要比单线程的快”的原因,个人觉得,可能是因为多线程的CPU计算的优先等级逻辑上降低了,IO操作被分配了更多的操作时间吧。