网络编程其他篇

1.1 greenlet简介

  1、greenlet原理 & 使用

    1. greenle间切换

        1)一个 “greenlet” 是一个很小的独立微线程,可以把它想像成一个堆栈帧,栈底是初始调用,而栈顶是当前greenlet的暂停位置。

        2)你使用greenlet创建一堆这样的堆栈,然后在他们之间跳转执行。

        3)跳转不是绝对的:一个greenlet必须选择跳转到选择好的另一个greenlet,这会让前一个挂起,而后一个恢复,
             两 个greenlet之间的跳转称为 切换(switch) 。

    2. 每个greenlet生命周期

        1)当你创建一个greenlet,它得到一个初始化过的空堆栈;

        2)当你第一次切换到它,他会启动指定的函数,然后切换跳出greenlet。

        3)当最终栈底 函数结束时,greenlet的堆栈又变成空的了,greenlet也会因为一个未捕捉的异常死掉。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from greenlet import greenlet
def test1():
print 12
gr2.switch()
print 34
def test2():
print 56
gr1.switch()
print 78
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch() '''打印结果:12 56 34 (test2的78不会打印)'''
# 1、最后一行跳转到 test1() ,它打印12
# 2、然后跳转到 test2() ,打印56
# 3、然后跳转回 test1() ,打印34
# 4、然后 test1() 就结束,gr1死掉
# 5、这时执行会回到原来的 gr1.switch() 调用。
#### 注意,78是不会被打印的,因为gr1已死,不会再切换。

greenlet官方事例

  2、greenlet与线程比较

      1)线程是抢占式的调度,多个线程并行执行,抢占共同的系统资源;而微线程是协同式的调度。

      2)其实greenlet不是一种真正的并发机制,而是在同一线程内,在不同函数的执行代码块之间切换

      3)实施“你运行一会、我运行一会,并且在进行切换时必须指定何时切换以及切换到哪。

      实质:

        1. greelet指的是使用一个任务调度器和一些生成器或者协程实现协作式用户空间多线程的一种伪并发机制,即所谓的微线程。

        2. greelet机制的主要思想是:生成器函数或者协程函数中的yield语句挂起函数的执行,直到稍后使用next()或send()操作进行恢复为止。

        3. 可以使用一个调度器循环在一组生成器函数之间协作多个任务。

最新文章

  1. C#的XML序列化及反序列化
  2. WebAPI使用多个xml文件生成帮助文档
  3. html/京东项目/京东网页高仿/js/jq/css/java web/
  4. 基础调试命令 - u/ub/uf
  5. springmvc 表单字段list提交问题
  6. 获取bing每日图片
  7. oracle数据库中的表设置主键自增
  8. Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法
  9. 深入理解javascript之this
  10. ajaxFileUpload+struts2多文件上传(动态添加文件上传框)
  11. oracle创建user具体指示
  12. php常量作用
  13. 设计模式--工厂方法模式(Factory method pattern)及应用
  14. AngularJS学习篇(二十二)
  15. 背景上实现阴影——linear-gradient
  16. Windows Server 2012 R2服务器部署Tomcat JDK、安装Mysql以及将Java项目部署到CVM
  17. Java容器解析系列(7) ArrayDeque 详解
  18. webpack2.x抽取css
  19. M - Sum
  20. Python+Selenium笔记(一):环境配置+简单的例子

热门文章

  1. python SMTP attachment
  2. 正则表达式识别js跳转的链接
  3. selenium元素高亮显示
  4. jQuery获取点击对象的父级
  5. springboot整合webSocket的使用
  6. <6>Cocos Creator​​​​​​​调试
  7. node事件循环和process
  8. 强化学习---TRPO/DPPO/PPO/PPO2
  9. 《大话设计模式》c++实现 原型模式
  10. django 网站的搭建(2)