学学笔记17
分类:计算机编程

1.协程(微线程)
协程是风姿罗曼蒂克种客户态的轻量级线程。
协程拥有谐和的寄放器上下文和栈。协程调整切换时,将贮存器上下文和栈保存到别之处,在切回到的时候,恢复生机原先保留的寄存器上下文和栈。因而:

协程能保存上一遍调用时的意况(即怀有片段意况的贰个特定组合卡塔尔国,每一遍经过重入时,就一定于步向上一遍调用的情景,换种说法:走入上二次离开时所处逻辑流的职责。

2.greenlet模块
greenlet是三个用C达成的协程模块,比较与python自带的yield,它能够使您在大肆函数之间自由切换,而不需把这一个函数先注脚为generator

例子

from greenlet import greenlet

def fun1():
    print(6)
    gar2.switch() #转换到gar2
    print(58)

def fun2():
    print(54)
    gar1.switch()


gar1 = greenlet(fun1) #启动协程
gar2 = greenlet(fun2)
gar1.switch()

 

3.gevent模块
gevent 是叁个第三方库,能够轻巧通过gevent实现产出同步或异步编制程序,在gevent中用到的最主要形式是Greenlet, 它是以C扩大模块方式接入Python的轻量级协程。 Greenlet全体周转在主程序操作系统进程的在这之中,但它们被同盟式地调整。

import gevent

def fun1():
    print('第一次运行fun1')
    gevent.sleep(2)           #切换到fun2的gevent.sleep(1)这一步
    print('第二次运行fun1')
def fun2():
    print('第一次运行fun2')
    gevent.sleep(1)            #sleep时间没到继续切换到fun3的gevent.sleep(2)
    print('第二次运行fun2')
def fun3():
    print('第一次运行fun3')
    gevent.sleep(2)
    print('第二次运行fun3')

gevent.joinall( [
    gevent.spawn(fun1),
    gevent.spawn(fun2),
    gevent.spawn(fun3),
])

结果

第一次运行fun1
第一次运行fun2
第一次运行fun3
第二次运行fun2
第二次运行fun1
第二次运行fun3

 

4.gevent私下认可检查测量试验不了urllib的i/o操作

 

5.要异步操作爬虫,必得抬高monkey.patch_all(),意思是把近日景序的具备的io操作单独做上标识

from urllib import request
import gevent,time
from gevent import monkey
monkey.patch_all() #把当前程序的所有的io操作单独做上标记
def f(url):
    print('GET%s'%url)
    resp = request.urlopen(url)
    data = resp.read()
    print('%d 数据接收来自%s.' % (len(data), url))

start_time = time.time()
gevent.joinall([
    gevent.spawn(f, 'https://www.python.org/'),
    gevent.spawn(f, 'https://www.baidu.com/'),
    gevent.spawn(f, 'https://github.com/'),
])
print('总共时间:',time.time()-start_time)

 

6.事件驱动模型
这几天超多的UI编制程序都是事件驱动模型,如相当多UI平台都会提供onClick()事件,那一个事件就代表鼠标按下事件。事件驱动模型大要思路如下:
  1卡塔尔. 有八个风云(音讯卡塔 尔(阿拉伯语:قطر‎队列;
  2. 鼠标按下时,往这些行列中追加叁个点击事件(音讯卡塔尔国;
  3卡塔尔国. 有个循环,不断从队列抽出事件,依据差异的事件,调用差异的函数,如onClick()、onKeyDown()等;
  4卡塔 尔(阿拉伯语:قطر‎. 事件(音信卡塔尔国日常都分别保存各自的管理函数指针,那样,每一个音信都有独立的管理函数;

7.事件驱动编程是生机勃勃种编制程序范式,这里先后的实行流由外界事件来决定。它的特征是包括多个事变循环,当外部事件时有产生时接纳回调机制来触发相应的拍卖。其余三种不乏先例的编程范式是(单线程卡塔 尔(阿拉伯语:قطر‎同步以至十二线程编制程序。

8.缓存 I/O 

  缓存 I/O 又被称作规范 I/O,大许多文件系统的暗中认可 I/O 操作都以缓存 I/O。在 Linux 的缓存 I/O 机制中,操作系统会将 I/O 的多寡缓存在文件系统的页缓存( page cache 卡塔尔中,相当于说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。

缓存 I/O 的缺点
  数据在传输进程中供给在应用程序地址空间和基本举行频仍数码拷贝操作,这几个数据拷贝操作所带给的 CPU 以致内部存款和储蓄器费用是充足大的。

注释:此缓存 I/O 在linux景况下的I/O
详解:

9.IO模式

阻塞 I/O(blocking IO)
非阻塞 I/O(nonblocking IO)
I/O 多路复用( IO multiplexing卡塔尔
非能量信号驱动 I/O( signal driven IO卡塔 尔(阿拉伯语:قطر‎
异步 I/O(asynchronous IO)

本文由pc28.am发布于计算机编程,转载请注明出处:学学笔记17

上一篇:没有了 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 电子商务货品库的成品设计,PHP数组内容不重复
    电子商务货品库的成品设计,PHP数组内容不重复
    多年来在做ecshop的货物仓库储存模块,分别给黄金年代款商品的两性情格组合设置仓库储存,如下图: # 手艺文书档案 每一天逛天猫和京东的时候,映着重
  • 九彩拼盘的前端技能,LayUI框架的应用
    九彩拼盘的前端技能,LayUI框架的应用
    内容: HTML 普及标签和总体性 文书档案类型申明 转义字符 网页访问无障碍(只是掌握卡塔 尔(阿拉伯语:قطر‎ CSS 常用采取器 体制生效准绳(浏览器的
  • 编制程序总计,动态目的
    编制程序总计,动态目的
    dynamic是FrameWork4.0的新特色。dynamic的现身让C#具备了弱语言类型的风味。编写翻译器在编写翻译的时候不再对项目举行检查,编译期暗中同意dynamic对象扶植
  • 动态编写翻译,在线运转
    动态编写翻译,在线运转
    千帆竞发产生c#代码的在线编辑。     在帮顾客写JAVA客商端访谈.NET达成的Webservice的示范代码发掘了一个有意思的标题。为有保持安全性,使用了wse2.0sp
  • 二叉树中度为2的结点
    二叉树中度为2的结点
    int Degree2(BitNode *t){ if(t==null) return 0;if(t-lchild!=nullt-rchild!=null) return 1 Degree2(t-lchild) Degree2(t-rchild);return Degree2(t-lchild) Degree2(t-rchild); } 您可能感兴趣的 非递归先