事件驱动和异步io有什么直接关系。

当我们访问一个网页,不考虑网络问题。我们人类不觉得网页慢。

但是实际中对计算机来说还是慢。那慢在哪里。io

io操作是整个网络操作中最慢的。比如你打开网页要是有2秒。cpu去请求页面也就是1毫秒,1999毫米都是io上消耗掉了。那么为什么会io 慢呢,因为内存要比硬盘快好几百倍。在等待io请求的时候,cpu为用户开启的线程在io操作的1999毫秒是阻塞在那里。

所以当多并发的时候,多个线程都在阻塞,CPU里同时存在的线程就多了,但是我们知道cpu同一时刻只能处理一个线程,当单cpu线程阻塞多了达到上百个或上千时就显得cpu特别忙。那么这种问题是需要解决的,怎么解决呢?就是利用异步io。select,poll,epoll这三种支持异步io的技术。操作系统内核中有一个io操作事件列表,操作系统内核高速循环这个列表,当处理完io后,调用一个回调函数,高速程序此io已经处理完成,你可以来取了。作为程序它在操作系统内核中注册的io事件后,就可以继续执行下面的操作了,不用等待这个io结束了,所以最终解决了cpu因为多io并发导致线程多,cpu压力大。但是,并没有提高用户访问网页的速度。

总结:

1.异步io(协程) 相对 多线程(非cpython的多线程)的优势是,解决了多线程时导致的cpu压力。

2.在cpython中,多线程会因为gil特性最终调用1个线程,所以不会因为多线程导致cpu压力大。但是这个特性也导致cpython中的多线程慢。

python2.0_s12_day9_协程&多线程和cpu,磁盘io之间的关系的更多相关文章

  1. python2.0_s12_day9_协程&Gevent协程

    Python之路,Day9 - 异步IO\数据库\队列\缓存 本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 Python连接Mysql数据库操作 协程 1.协程,又 ...

  2. 网络编程基础--协程--greenlet切换---gevent自动识别 IO ---

    协程: 1 单线程来实现并发---协程: 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程, 即协程是由用户程序自己控制调度的 只 ...

  3. 协程、gevent实现异步io、进程、线程、协程对比

    异步io的说白了就是遇到io操作的时候,就停下来去做别的事情.io分网络io和磁盘io,网络io比如说打开一个网站获取数据,下载一首歌等等,磁盘io就是把数据存到一个文件里面,写到磁盘上. 从网站上获 ...

  4. 协程,事件驱动,异步io模型,异步网络框架

    协程是一种用户态的轻量级线程,内核不知道它的存在.协程运行于一个线程中,协程的切换是由用户控制的.线程的切换是由cpu来控制的,而协程的切换是由用户控制的.协程的执行时串行的. select/poll ...

  5. 异步、+回调机制、线程queue、线程Event、协程、单线程实现遇到IO切换

    # from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor # import requests # import o ...

  6. 并发编程:协程TCP、非阻塞IO、多路复用、

    一.线程池实现阻塞IO 二.非阻塞IO模型 三.多路复用,降低CPU占用 四.模拟异步IO 一.线程池实现阻塞IO 线程阻塞IO 客户端 import socket c = socket.socket ...

  7. linux性能优化cpu 磁盘IO MEM

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  8. swoole与php协程实现异步非阻塞IO开发

    “协程可以在遇到阻塞的时候中断主动让渡资源,调度程序选择其他的协程运行.从而实现非阻塞IO” 然而php是不支持原生协程的,遇到阻塞时如不交由异步进程来执行是没有任何意义的,代码还是同步执行的,如下所 ...

  9. java主线程结束和子线程结束之间的关系

    (一)Main线程是个非守护线程,不能设置成守护线程. 这是因为,main线程是由java虚拟机在启动的时候创建的.main方法开始执行的时候,主线程已经创建好并在运行了.对于运行中的线程,调用Thr ...

随机推荐

  1. VC++编程之道读书笔记(2)

    第三篇 技术细节 第七章:细说开发人员必知必会的39个开发细节 细节36:单例模式的应用 在开发程序时,往往需要在整个工程中只需要一个类的实例.而这个实例一旦被创建就不能被其他的实例再创建了,通常我们 ...

  2. ARM获得PC指针为何PC=PC+8

    http://blog.csdn.net/sddzycnqjn/article/details/7691534 R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指 ...

  3. iOS状态栏详解(隐藏)

    状态栏的隐藏 状态栏的隐藏主要有两种方法:方法一:通过代码控制 @interface UIApplication(UIApplicationDeprecated) // Setting statusB ...

  4. wpf treeview中的两个事件

    使用模板HierarchicalDataTemplate <HierarchicalDataTemplate x:Key="BookMarkTemplate" > &l ...

  5. xml选择节点方法

    1.选取某个节点 方法一:newNode = document.DocumentElement.SelectSingleNode("//student[@id='A103']"); ...

  6. 【Unity/Kinect】使用KinectManager的一般流程

    想要从Kinect读取到数据,然后使用数据,通常是以下流程: using UnityEngine; using System.Collections; /// <summary> /// ...

  7. C语言 · 阿尔法乘积

    算法训练 阿尔法乘积   时间限制:1.0s   内存限制:512.0MB        问题描述 计算一个整数的阿尔法乘积.对于一个整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么 ...

  8. JavaScript 深入理解作用域链

    第一步. 定义后:每个已定义函数,都有一个内在属性[scope],其对应一个对象的列表,列表中的对象仅能内部访问. 例如:建立一个全局函数A,那么A的[Scope]内部属性中只包含一个全局对象(Glo ...

  9. Server 2008作为打印服务器的四大错误解决方案

    http://os.51cto.com/art/201004/197322.htm http://os.51cto.com/art/201004/197322_1.htm http://os.51ct ...

  10. javascript 商务通

    /*下面的才是新的商务通*/ var swt_autoDisplay_times=15;/*商务通自动弹出时间,秒为单位*/ var float_left_ad_display_Init=0;/*在允 ...