问题描述
- 多线程和单线程拷贝文件那个效率高
-
单线程拷贝一个文件和多线程拷贝一个文件,那个效率更高,求大神写个例子证明一下。
解决方案
我菜,不会写,现在下载都是多线程的吧,看资源就知道。。。。
解决方案二:
拷贝文件的瓶颈在io,而不是cpu,多线程没有任何优势,而且对于机械硬盘,多个拷贝会导致寻道造成的性能损失。固态磁盘两者查不多。
解决方案三:
一提到多线程一般大家的第一感觉就是可以提升程序性能,在实际的操作中往往遇到性能的问题,都尝试使用多线程来解决问题,但多线程程序并不是在任何情况下都能提升效率,在一些情况下恰恰相反,反而会降低程序的性能。这里给出两个简单的例子来说明下:
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()
解决方案四:
多线程和单线程拷贝文件那个效率高
拷贝文件的瓶颈在于硬盘读写
如果你的文件都比较小的话,如几M,建议用多线程,如果文件在几个G的话,建议你用单线程
解决方案五:
单线程不会有线程同步,切换等,不过多线程可以i利用多核。