课程回顾:

  线程池

  队列:同一进程内的队列

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

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

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

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

今日内容:

  为什么要有协程?

    

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

      因为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理论上也可以开启无线多个监听事件

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

      

协程,yield,i多路复用,复习的更多相关文章

  1. 多线程、多进程、协程、IO多路复用请求百度

    最近学习了多线程.多进程.协程以及IO多路复用,那么对于爬取数据来说,这几个方式哪个最快呢,今天就来稍微测试一下 普通方式请求百度5次 import socket import time import ...

  2. 协程与IO多路复用

    IO多路复用 I/O多路复用 : 通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. Python Python中有一个select模块, ...

  3. python第十周:进程、协程、IO多路复用

    多进程(multiprocessing): 多进程的使用 multiprocessing是一个使用类似于线程模块的API支持产生进程的包. 多处理包提供本地和远程并发,通过使用子进程而不是线程有效地侧 ...

  4. Unity3D协程yield的理解

    Unity3D的协程概括地将就是:对于一段程序,你可以加上yield标明哪里需要暂停,然后在下一帧或者一段时间后,系统会继续执行这段代码.协程的作用:①延迟一段时间执行代码.②等某个操作完成之后再执行 ...

  5. (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块

    一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...

  6. 进程,线程,协程,io多路复用 总结

    并发:要做到同时服务多个客户端,有三种技术 1. 进程并行,只能开到当前cpu个数的进程,但能用来处理计算型任务 ,开销最大 2. 如果并行不必要,那么可以考虑用线程并发,单位开销比进程小很多 线程: ...

  7. Python 多进程 多线程 协程 I/O多路复用

    引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...

  8. U3D协程yield的使用和理解

    部分内容参考网址:http://blog.csdn.net/huang9012/article/details/29595747 Win7+U3D 4.6.7 1.在c#中使用①首选需要定义一个返回值 ...

  9. Python之路,Day9 - 线程、进程、协程和IO多路复用

    参考博客: 线程.进程.协程: http://www.cnblogs.com/wupeiqi/articles/5040827.html http://www.cnblogs.com/alex3714 ...

随机推荐

  1. luogu P2258 子矩阵 |动态规划

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第22.44行和第22.44.55列交叉 ...

  2. this的用法-(2019-3)

    作为前端程序员,this应该不会陌生,指执行期的上下文,以下总结了this的几种场景: 1.全局作用域下,this指的就是Window,在控制台输出this,返回的是Window对象 2.在一般函数中 ...

  3. c、c++ char*和wchar*互相转换

    1. 问题描述 编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes.在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为cha ...

  4. 一个小巧,也很nice的“小日历”--一个Android App

    一个小巧也很Nice的“小日历” 背景 因为,常用日历记一些事情,Android自带的日历,如果有事情,会显示一个小点,然后点击进去后才能看到事情的具体内容,不是很方便. 所以,写了一个“小日历” 特 ...

  5. 2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能

    原文:2019-11-29-VisualStudio-使用三个方法启动最新-C#-功能 title author date CreateTime categories VisualStudio 使用三 ...

  6. C# 身份证号码15位和18位验证

    /// <summary> /// 身份证 /// </summary> [Serializable] public class IDCard {     /// <su ...

  7. C#根据流下载文件

    C#从服务器下载文件可以使用下面4个方法:TransmitFile.WriteFile.WriteFile和流方式下载文件,并保存为相应类型,方法如下: .TransmitFile实现下载 prote ...

  8. NSSM部署.Net Core到 Windows 服务

    NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...

  9. 在 VSCode 调试过程中,使用 Watcher,免手动重新编译

    1.安装Microsoft.DotNet.Watcher.Tools包 dotnet add package Microsoft.DotNet.Watcher.Tools --version 2.0. ...

  10. Windows Server - Tomcat服务器下载、安装、配置环境变量教程

      版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_40881680/articl ...