4个线程拷贝一个文件,是否有意义在某群看到讨论,,一直在争论,,当然是二方面的辩论。。不知道在实战中是否有意义?单CPU分时间片,四个线程就是轮转时间片,有意义吗,,请教了,请高手帮忙解释。感谢。

解决方案 »

  1.   

    本地的话应该木意义但是网络多线程下载文件有时候可以提速,这个可以自己去google一下原理
      

  2.   

    单CPU,单资源(硬盘)...资源竞争,无意义多硬盘,从a盘考到b盘是否有意义呢?或者
    多硬盘,如果一个线程负责读a盘,一个线程负责写B盘,是否有意义呢?
      

  3.   

    单CPU如果程序中需要数据运算,又需要调用其他设备,而且需要等待其他设备就绪如果那么是单线程
    等待外围设备的时候程序完全处于"暂停"状态,CPU就空闲了如果是,多线程
    一个线程负责运算,一个线程负责外围设备
    那么等待外围设备的时候,负责外围设备的线程会退出CPU,负责运算的线程会占用CPU
    CPU并没有空闲这样才有意义
      

  4.   

    单线程                     CPU占用
    运算: ----------          ----------------
    外围设备:       ----------                ----------多线程
    运算线程: ----------    ----------   ---------       -------
    外围设备:           -----------------         ----------------
      

  5.   

    单线程                     CPU占用
    运算: ----------|          |----------------|
    外围设备:       |----------|                |----------多线程
    运算线程: ----------|    ----------   |---------|       -------
    外围设备:           |-----------------|         | ----------------
      

  6.   

    感谢七分画图,,俺像群中讲的,,单CPU多硬盘多线程应该能增加效率如果是多CPU单硬盘这种情况就应该考虑一下了
      

  7.   

    拷贝文件,可以是像DMA一样的,这时候和CPU没有什么大关系的了!
    具体要看你文件的IO操作了,比如是多磁盘冗余?...
    FT
    --
    Anything one man can imagine, other men can make real.
      

  8.   

    理论上说,如果在你的程序复制文件的同时,别的程序也在读写硬盘的话,无论何种情况(CPU的多少、硬盘的个数),分成多个线程,都是有点意义的。因为系统是轮流分配时间给各个线程的。假设系统已经有20个线程在跑(假设各个线程的优先级相同),那么你的程序运行后,如果是单线程,此时有21个线程,系统会分配1/21(4.76%)的时间来运行你的程序。假如你的程序有4个线程,这4个线程都在复制文件,那么此时系统有24个线程,系统会分配4/24(16.7%)的时间片断运行你的程序(复制文件),这样也就加快了复制的速度。
    当然,上面只是假设,系统的各个线程的优先级不可能完全,而且并不是所有的线程都在读写硬盘,所以用4个线程,并不是就可以提高4倍左右的速度。而且CPU比较快,硬盘比较慢,如果此时只有你的程序读写硬盘,那么读写硬盘速度可能没有提高。但是如果有其他的程序同时读写硬盘,那么无论是几个CPU、几个硬盘,我认为用4个线程应该都可以提高读写的速度,但是程序代码会变得复杂一些。
      

  9.   

    书上不是说多线程对多cpu的情况才有意义么?
      

  10.   

    要看你是用在什么地方?比如在多CPU、多数据库节点上做数据LOAD,这样做是很有意义的,如DB2数据库,在做ETL时通常要将一个文件的拷贝进行分解,这样做就是为了发挥主机及数据库的性能。
      

  11.   

    本地拷贝或者远程拷贝,多线程都没什么用,除非网络传输的时候对方限制了每个连接的下载速率。像NetAnts、FlashGet这样的下载工具,可以测试一下,开一个线程和开多个线程,服务器端不做任何限制,下载总速率应该差不多。