zoukankan      html  css  js  c++  java
  • 协程,yield,i多路复用,复习

    课程回顾:

      线程池

      队列:同一进程内的队列

        先进先出  后进先出  优先级队列

      线程池中的回调函数是谁在调用?

        线程池中的回调函数是子线程调用的,和父线程没有关系

        进程池中的会点函数是父进程调用的,和子进程没有关系

    今日内容:

      为什么要有协程?

        

        因为想要在单线程内实现并发的效果

          因为CPthon有GIL锁,限制了在同一时间点,智能执行一个线程

          所以想要在执行一个线程的期间,充分的利用cpu的性能

          所以才有了想在单线程内实现并发的效果

        并发: 切换+保存状态

          1 因为某个程序阻塞了

          2 因为某个程序用完了时间片

          很明显  解决1 这个问题才能提高效率

        所以想要实现单线程的并发,就是解决在单线程内,多个任务函数中某个任务遇见IO操作,马上自动切换到其他任务函数去执行.

      

      协程: 是一个比线程更加轻量级的单位,是组成线程的各个函数

        携程本身没有实体

      greenlet模块:能简单的实现函数与函数之间的切换,但是遇到IO操作,不能自动切换到其他函数中

        (1) 注册一下函数func,将函数注册成一个对象f1

          f1 = greenlet(func)

        (2) 调用函数func,使用f1.switch(),如果func需要传参,就在switch这里即可

      gevent模块: 可以实现在某函数内部遇到IO操作,就自动的切换到其它函数内部去执行

        g = gevnent.spawn(func,参数)  注册一下函数func,返回一个对象g

        gevent.join(g)#等待g指向的函数func执行完毕,如果在执行过程中,遇到IO就切换

        gevent.joinall([g1 ,g2 ,g3  ])#等待g1 , g2, g3指向的函数func执行完毕

      大的总结:协程使用户自己去调度的,

        面试题:

        已经学习过了进程,线程,协程

          计算密集用多进程,可以充分利用多核cpu的性能

          IO密集用多线程(注意,协程是在单线程的)

        多线程和协程的区别

          线程是由操作一同调度,控制

          协程是由程序员自己调度,控制

        

        IO多路复用

          阻塞IO

          非阻塞IO

          多路复用IO  

          异步IO  python实现不了,但是有tornado框架,天生自带异步

          异步现在可以用  asyncio

        面试题

          select

          select  和  poll  和  epoll的区别

          select和poll有一个共同的机制,都时采用轮询的方式去询问内核,有没有数据准备好了

          select有一个最大监听事件的限制,32位机限制1024,64位机限制2048

          poll没有,理论上poll可以开启无限大,1G内存大概够你开10w个事件去监听

          

          epoll是最好的,采用的是回调机制,解决了select和poll共同存在的问题

          而且epoll理论上也可以开启无线多个监听事件

    并发的本质:  切换 + 保存状态

          

  • 相关阅读:
    Java实现埃拉托色尼筛选法
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现插入排序
    Java实现插入排序
    Java实现插入排序
    使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序 good(从VS2012 update1开始支持xp和c++11)
  • 原文地址:https://www.cnblogs.com/jerry-hou/p/12068356.html
Copyright © 2011-2022 走看看