yield,控制单线程内切换任务的模块,实现智能化遇到IO就切换,IO多路复用

学习回顾
    线程池
    队列:同一进程内的队列
        先进先出    后进先出    优先级队列
    线程池中的回调函数是谁在调用?
        线程池中的回调函数是谁调用的,和父线程没有关系
        进程池中的回调函数是父进程调用的,和子进程没有关系
    最终目的是为了提高CPU的利用率:
        在单进程里为了实现并发,线程就出来了
        在单线程里为了实现并发,协程就出来了
    并发的本质:切换+保存状态
    为什么要有协程?
        因为想要在单线程内实现并发的效果。因为cpython有GIL锁,限制了在同一个时间点只能执行一个线程
        所以想要在执行一个线程的期间,充分的利用CPU的性能
        所以才有想在单线程类实现并发的效果
        并发:切换+保存状态
        cpu是为什么要切换?
            1.因为某个程序阻塞了
            2.因某个程序用完了时间片
            很明显,解决1这个问题才能提高效率
        所以想要实现单线程的并发,就要解决在单线程内,多个任务函数中,某个任务函数遇见IO操作,马上自动切换到其他任务函数去执行
    协程:是一个比线程更加轻量级的单位,是组成线程的各个函数,协程本身没有实体。
        是单线程下的并发,又称微线程。纤程。
        一句话:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的
        greenlet:能简单的实现函数与函数之间的切换,但是遇到IO操作,不能自动的切换到其他函数中
            (1)注册一下函数,将函数注册成一个对象f1
                f1 = geenlet(func)
            (2)调用func,使用f1.switch(),如果func需要传参,就在switch这里传即可
        gevent模块:可以实现在某函数内部遇到IO操作,将自动的切换到其他函数内部去执行
            g = gevent.spawn(func,参数)注册一下函数func,返回一个对象g
            gevent.j

你可能感兴趣的:(IO多路复用,python)