2 zzzzz404 zzzzz404 于 2015.06.09 22:17 提问

多线程和单线程拷贝文件那个效率高

单线程拷贝一个文件和多线程拷贝一个文件,那个效率更高,求大神写个例子证明一下。

5个回答

CodeofWorker
CodeofWorker   2015.06.09 22:33

我菜,不会写,现在下载都是多线程的吧,看资源就知道。。。。

CodeofWorker
CodeofWorker 我又来了,没有正式写,但方案应该是把文件以同一 二进制排序规则进行分割成若干个字节包,再以多线程方式同时下载指定数量的包,若有11个包,每线程分配5,用三个线程去下。。应该是可行的。
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.06.09 23:22

拷贝文件的瓶颈在io,而不是cpu,多线程没有任何优势,而且对于机械硬盘,多个拷贝会导致寻道造成的性能损失。固态磁盘两者查不多。

sxjiangdongqin
sxjiangdongqin   2015.06.10 08:10

一提到多线程一般大家的第一感觉就是可以提升程序性能,在实际的操作中往往遇到性能的问题,都尝试使用多线程来解决问题,但多线程程序并不是在任何情况下都能提升效率,在一些情况下恰恰相反,反而会降低程序的性能。这里给出两个简单的例子来说明下:
import threading
from time import ctime

class MyThread(threading.Thread):
def init(self, func, args, name):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args

def run(self):
    print 'starting', self.name, 'at:',ctime()
    apply(self.func, self.args)
    print self.name, 'finished at:', ctime()

def fun1(x):
y = 0
for i in range(x):
y+=1

def fun2(x):
y = 0
for i in range(x):
y+=1

def main():
print 'staring single thread at:',ctime()
fun1(10000000)
fun2(10000000)
print 'finished single thread at:',ctime()

t1 = MyThread(fun1,(10000000,),fun1.__name__)
t2 = MyThread(fun2,(10000000,),fun2.__name__)
t1.start()
t2.start()
t1.join()
t2.join()

print 'all done'

if name == '__main__':
main()

    import threading

from time import ctime

class MyThread(threading.Thread):
def init(self, func, args, name):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args

def run(self):
    print 'starting', self.name, 'at:',ctime()
    apply(self.func, self.args)
    print self.name, 'finished at:', ctime()

def fun1(x):
for i in range(x):
fd = open('1','w')
fd.close()

def fun2(x):
y = 0
for i in range(x):
y+=1

def main():
print 'staring single thread at:',ctime()
fun1(15000)
fun2(50000000)
print 'finished single thread at:',ctime()

t1 = MyThread(fun1,(15000,),fun1.__name__)
t2 = MyThread(fun2,(50000000,),fun2.__name__)
t1.start()
t2.start()
t1.join()
t2.join()

print 'all done'

if name == '__main__':
main()

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.10 09:11

多线程和单线程拷贝文件那个效率高

拷贝文件的瓶颈在于硬盘读写

如果你的文件都比较小的话,如几M,建议用多线程,如果文件在几个G的话,建议你用单线程

oyljerry
oyljerry   Ds   Rxr 2015.06.09 22:30

单线程不会有线程同步,切换等,不过多线程可以i利用多核。

Csdn user default icon
上传中...
上传图片
插入图片