Python:gevent综合案例,进程线程协程对比

综合案例:

import gevent,time#导入模块

def boy():
    print('have a talk')
    gevent.sleep(2)#遇到gevent耗时操作协程会自行切换
    print('good bye')

def girl():
    print('python good?')
    gevent.sleep(3)
    print('good')

def people():
    print('I am a person')
    gevent.sleep(4)
    print('I am a')

t1= time.time()#时间戳
gevent.joinall([gevent.spawn(boy),
                gevent. spawn(girl),
                gevent.spawn(people)])#等待列表中的协程执行完毕
t2=time.time()
print('time taken:',t2-t1)

输出结果为:

have a talk
python good?
I am a person
good bye
good
I am a
time taken: 4.111427545547485

进程线程协程对比:

总结:进程是资源分配的单位,线程是调度的操作系统的一个单位,一个程序至少有一个进程,一个进程至少有一个线程,即主线程;协程切换任务资源比较小,效率会更高

并发:分时切片串行的操作,实际上同一时间只有一个任务在运行

并行:可同时操作

线程和进程是由程序触发系统接口,最后的执行者是系统,协程的操作是程序员

应用场景:CPU密集型:多进程

IO密集型:线程

IO阻塞且需要大量并发场景:协程效率>线程

IO+CPU都密集:多进程+协程操作

举例:多进程:多个QQ登录;QQ之间无法沟通,进程间资源不共享

进程间通信:队列        共享消息队列

多线程:一个QQ开多个聊天窗口就是多线程,线程资源共享,操作者就是资源

同一个时间只能和一个人聊天:线程的并发

抖动窗口或视频,被迫停止与其他人聊天:线程资源竞争

指定先来后到的选择,后来要等待,解决资源竞争的办法:Lock锁+join

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值