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:保存状态

  • 相关阅读:
    PHP 页面编码声明方法详解(header或meta)
    淘客部分功能实现源码
    CSS3动画效果应用
    JavaScript之Tab标签(原始版)
    JavaScript之淡入淡出
    关于响应式布局
    深入理解 SVG 系列(一) —— SVG 基础
    面试题
    随记
    一道经典面试题-----setTimeout(function(){},0)
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11733953.html
Copyright © 2011-2022 走看看