Python在计算密集和IO密集情况下,单进程、多进程、多线程运行效率的小测试

多进程----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

进程线程的区别联系:

  1. 两者都是多任务编程方式,都能使用计算机多核资源
  2. 进程的创建删除消耗的计算机资源比线程多
  3. 进程空间独立,数据互不干扰,有专门通信方法;线程使用全局变量通信
  4. 一个进程可以有多个分支线程,两者有包含关系
  5. 多个线程共享进程资源,在共享资源操作时往往需要同步互斥处理
  6. 进程线程在系统中都有自己的特有属性标志,如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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值