zoukankan      html  css  js  c++  java
  • 10.24 Event事件,进程池与线程池,协程

    Event事件

    作用

    由一些线程控制另一些线程的执行

    from thearding import Event
    e = Event()
    e.wait() #标记为False
    e.set() #标记为True
    

    进程池与线程池

    什么是进程池与线程池

    进程池与线程池是用来控制当前程序允许创建(进程/线程)的数量

    进程池与线程池的作用

    保证在硬件允许的范围内创建(进程/线程)的数量

    如何使用

    from concurrent.futures import ProcessPollExecutor
    ProcessPollExecutor(5) #代表只能开启5个进程
    ProcessPollExecutor() #默认CPU个数限制进程数
    ThreadPollExecutor(5) #5代表只能开启5个线程
    ThreadPollExecutor() #默认CPU个数*5限制线程数
    

    回调函数

    def call_back(res):
    	print(type(res))
    	#注意:赋值操作不要与接收值同名
    	res2 = res.result()
    	print(res2)
    

    会让所有线程池的任务结束后才能继续执行下面的代码

    协程

    在单线程下实现并发
    注意:协程不是操作系统资源,是程序员起的名字,让单线程能实现并发

    目的

    操作系统

    多道技术,切换+保存状态
    遇到IO
    CPU执行时间过长

    协程

    通过手动模拟操作系统"多道技术",实现切换+保存状态
    手动实现遇到IO,欺骗操作系统误以为没有IO操作
    单线程 遇到IO 切换+保存状态
    单线程 计算密集型,来回切换+保存状态,反而效率降低
    优点:
    在IO密集型情况下,会提高效率
    缺点:
    若在计算密集型情况下,会降低效率

    如何实现协程

    切换+保存状态
    并发:切换
    yield:保存状态

  • 相关阅读:
    【设计模式】策略模式
    【设计模式】模板方法模式
    【C++】《Effective C++》第五章
    【C++】《Effective C++》第四章
    free命令详解(内存)
    top命令详解(动态进程)
    ps命令详解(静态进程)
    SpringBoot_集成Redis
    SpringBoot_热部署插件
    SpringBoot_实现RESTfull API
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11733953.html
Copyright © 2011-2022 走看看