实现的功能是:逐条读入iis日志文件,把其中客户ip转换成域名,然后写入文件。
多线程的话是用了10个,分块读取,写入各自的文件。单线程机器是 赛扬3.0, 2G 内存
多线程机器是 赛扬2.8, 1G 内存 运行的结果是:
  单线程: 从10:00运行到17:47 生成文件1.43M
  多线程:从16:43运行到17:47  生成文件2.86M,其中最快的已经700多K。读写的代码都是一样的,为什么某个线程的效率也要比单线程的快呢? 

解决方案 »

  1.   

    只看cpu主频和内存大小还不够的吧。系统总线、内存速度、硬盘传输速率都要看。多线程对单cpu好像没什么意义。
      

  2.   

    首先纠正一下:多线程对单cpu没意义????无稽之谈吧,很有意义
    楼主是要逐条读日志文件,也就需要做大量的i/o操作,从cpu启动硬盘到数据传入内存相对cpu来讲需要大量时间
    单线程也只能等等等,而多线程则可以并行做转换,效率上是不如相提并论的至于楼主效率问题,本人觉得硬盘传输速率是这个问题的主要因素把,毕竟不是
    做大量的科学运算,大部分时间都浪费在i/o这上面了
    当然还有其他众多因素。
      

  3.   

    今天再把单线程的程序拿到B机上运行,看看结果如何。按照【whoami333】的说法,单cpu下,单、多线程无区别,那怎么运行结果差那么多。
      

  4.   

    多线程对内存要求很高
    也不赞同“多线程对单CPU无意义”,系统都是按时间片分配给每个线程,大家都是一样
    不过线程越多,在内存中需要保护的现场就越多
      

  5.   

    同意二楼的意见,这个程序,CPU运算极少,主要都是关于硬盘寻址的操作,而硬盘的工作量最大。
    单线程时,硬盘先等CPU寻址,然后硬盘写,CPU等硬盘写完,再计算下一次读写的地址
    而多线程时,CPU首先不会等硬盘,而硬盘也就不用等CPU了。也就是说,单线程是读一行,写一行,然后再读一行,再写一行,每一步都是等上一步完成再进行下一步;而多线程,是读一行,写一行,同时读了下一行,甚至几行的内容(理论上,读取时间应该快于写入时间吧)。当然这里说的下一行,是下一块的某行,并不是真正的紧跟着的下一行。说到这里,突然想到,也许有人会说,单CPU的话,多线程其实质还是一次读一条写一条的单步操作吧。我觉得,这个就要说硬盘的缓存问题了。CPU将数据先发送到硬盘缓冲区里,然后写入就不管了,单线程的这个时候,会等写完,而多线程会开始读取了。至于磁盘的工作原理,磁头柱面缓存等等的内容,查阅相关资料吧。硬盘的工作可不见得完全是单线程的。呵呵。至于说,“某个线程的效率也要比单线程的快”的原因,个人觉得,可能是因为多线程的CPU计算的优先等级逻辑上降低了,IO操作被分配了更多的操作时间吧。
      

  6.   

    這個問題很顯然時間大多耗在IO上的。如果真的想快點﹐就是創建內存映象文件﹐然后在內存中多線程(多核CPU更好)搜索計算﹐這樣速度會快10倍以上﹗