当前位置: 首页 > article >正文

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


http://www.kler.cn/a/611491.html

相关文章:

  • Go听课笔记
  • AIMB-ASMB-788B(PPC-MB-620B)RAID驱动安装(笔记版)
  • 数据联邦技术与工具:构建实时数据访问的架构实践
  • MySQL-5.7.37安装配置(Windows)
  • 【Godot】导出为安卓安装包
  • 基于SpringBoot的实现的客户关系管理系统(CRM)(源码+数据库)
  • JPA、Hibernate、 Spring Data JPA 以及Mybatis的关系(Java)
  • ctfshow做题笔记—栈溢出—pwn73、pwn74
  • AR沙盘模型制作技术解析,赋能企业展厅创新
  • 线性模型与非线性扩展
  • 管道(Linux)
  • SpringCould微服务架构之Docker(2)
  • 使用Ollama(自定义安装位置)与RagFlow构建本地知识库
  • WPF 与 C# 融合开发:从基础到高级应用(一)
  • Mysql update更新数据执行流程
  • Maven工具学习使用(四)——仓库
  • 智能科技与美学融合,赵伟辰荣膺 2025 iF 设计大奖
  • 量化研究--小果聚宽交易系统上线高速服务器,提供源代码
  • C#从入门到精通(2)
  • Java在2025年的新趋势与应用