多进程----2.1亿次计算: 3.185178518295288
多进程----1800万次IO: 1.8847143650054932
10个线程----2.1亿次计算:9.001402378082275
10个线程----1800万次IO: 6.638666391372681
进程----2.1亿次计算 single cup: 7.320388317108154
进程----1800万次IO single cup: 5.3107922077178955
进程线程的区别联系:
- 两者都是多任务编程方式,都能使用计算机多核资源
- 进程的创建删除消耗的计算机资源比线程多
- 进程空间独立,数据互不干扰,有专门通信方法;线程使用全局变量通信
- 一个进程可以有多个分支线程,两者有包含关系
- 多个线程共享进程资源,在共享资源操作时往往需要同步互斥处理
- 进程线程在系统中都有自己的特有属性标志,如ID,代码段,命令集等。
总而言之,Python基本无并发啊!
测试代码如下,有疑问的朋友可以在自己的电脑上试试,我这边的配置是i3-6100,8G,Linux系统下进行的测试
"""
测试用例
"""
def count(x,y):
c = 0
while c<7000000: #2100万次计算
x += 1
y += 1
c += 1
def io():
write()
read()
def write():
f = open('test','w')
for i in range(1800000):
f.write('hello world\n')
f.close()
def read():
f = open('test')
lines = f.readlines()
f.close()
"""
单进程时的运行
"""
from test import *
import time
tm = time.time()
for i in range(10):
# count(1,1)
io()
print("single cup:", time.time()-tm)
# 进程----计算 single cup: 7.320388317108154
# 进程----IO single cup: 5.3107922077178955
"""
多进程测试
"""
from test import *
import multiprocessing as mu
import time
tm = time.time()
jobs = []
for i in range(10):
p = mu.Process(target=io)
p.start()
jobs.append(p)
[i.join() for i in jobs]
print(time.time()-tm)
"""
多线程测试
"""
from test import *
import threading
import time
tm = time.time()
jobs = []
for i in range(10):
t = threading.Thread(target=io)
t.start()
jobs.append(t)
[i.join() for i in jobs]
print(time.time()-tm)