none
多线程中fopen 耗时1s 您相信吗? RRS feed

  • 问题

  • 同时开1000个线程,每个线程打开一个不同的空文件,结果fopen大都耗时到几百毫秒至几秒,有谁能帮我详细解释一下这种现象吗? 谢谢!

    一般正常情况下打开文件最多16ms左右,但在几百个上千个线程同时做打开文件操作的情况下,打开文件操作达到几百ms甚至几秒,而且测试中打开的都是空文件。


    2010年8月20日 7:15

答案

  • 因为您的硬盘跟CPU不一样,本身不支持多线程,所以多线程读取一般来说只会更慢,您还是修改一下算法吧。等什么时候您的硬盘支持并发访问了(现在是操作系统帮你提供一个假的,就跟单核CPU上面的多线程调度一样),那你这种写法就会变好了。

    2010年8月25日 4:59
  • 线程需要调度,而且 线程看CPU  读写文件看硬盘! 线程之间还存在 上下文切换! 所花费的事件当然多, WINDOWS 核心编程里对这方面有说明!
    …|▌'寔堅蔃の/「≯還寔╪.逞蔃﹖
    2010年8月26日 2:40

全部回复

  • 同时开1000个线程这种设计有太多的商榷的余地

    2010年8月20日 15:20
  • 开1000个线程你干什么都慢,它消耗了大量的系统内部资源。再进行系统文件的IO当然也慢。估计你的电脑配置也不行,若是Windows Server的话在8核双CPU的机器上这根本不是问题
    0xBAADF00D
    2010年8月23日 1:21
    版主
  • 你的硬盘没有跳出来拉横额抗议么,嘿嘿。。。
    2010年8月23日 8:32
  • 因为您的硬盘跟CPU不一样,本身不支持多线程,所以多线程读取一般来说只会更慢,您还是修改一下算法吧。等什么时候您的硬盘支持并发访问了(现在是操作系统帮你提供一个假的,就跟单核CPU上面的多线程调度一样),那你这种写法就会变好了。

    2010年8月25日 4:59
  • 线程需要调度,而且 线程看CPU  读写文件看硬盘! 线程之间还存在 上下文切换! 所花费的事件当然多, WINDOWS 核心编程里对这方面有说明!
    …|▌'寔堅蔃の/「≯還寔╪.逞蔃﹖
    2010年8月26日 2:40