【整理】Python之JIT、Django、Greenlet和Stackless-阿里云开发者社区

开发者社区> 摩云飞> 正文

【整理】Python之JIT、Django、Greenlet和Stackless

简介:
+关注继续查看

【JIT】

即时编译(Just-in-time compilation),又称为动态编译,是一种提高程序运行效率的方法。
通常程序有两种编译方式:静态编译与动态编译(直译)。在静态编译中,程序在执行前全部被翻译为机器码,而动态直译则是边运行边翻译。
即时编译器则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。

另外,一般来讲编译执行比解释执行要快,但是编译之后又不能跨平台,那我们就到目标平台上去,先编译再执行,这样就比纯解释要快了。这种编译是在“运行”的时候自动进行的,所以叫即时编译(JIT)。

Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC(Model View Controller)的设计模式,M是指数据模型,V是指用户界面,C则是控制器。
它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY(Don't Repeat Yourself)法则。在Django中Python被普遍使用,甚至包括配置文件和数据模型。

【Greenlet

Greenlet是Stackless的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步数据交换。一个”greenlet”,是一个更加原始的微线程的概念,但是没有调度,或者叫做协程。这在你需要控制你的代码时很有用。你可以自己构造微线程的 调度器;也可以使用”greenlet”实现高级的控制流。例如可以重新创建构造器;不同于Python的构造器,我们的构造器可以嵌套的调用函数,而被嵌套的函数也可以yield一个值。Greenlet是作为一个C扩展模块给未修改的解释器的。

tasklet

一个tasklet对象对应一个Python线程内的微任务。Tasklet的特点就是轻量级和可移植性,并且可以作为系统线程或进程的非常好的替代物。在程序启动的时候,总是存在一个运行的主tasklet。

【Stackless】

Stackless Python是Python程序语言的一个增强版本。其能够使程序员获得基于线程编程的好处,而免受与传统线程模型相伴的性能和复杂度问题的困扰。Stackless为Python引入了微线程的概念(microthread),其占用系统资源少,属于轻量级的东东。如果使用得当,你将获得如下益处:
a) 更好的程序结构 
b) 更据可读性的代码
c) 提高程序员的代码生产力

在您想通过使用Stackless获得便利的时候,只有那么一点点的来自stackless模块的功能性信息需要你注意一下:

Microthreads: tasklet封装了允许以microthreads形式被启动的函数。 
Channels:channels可被用于两个tasklet之间的双向通信。 
Scheduling:内置的循环调度器。其可以被用于合作式或者优先级式调度tasklets。 

Serialisation:可以通过pickling方式将tasklets序列化到硬盘以便后期恢复。

【Pickling】

Stackless的主要特性之一就是其可以对tasklet进行pickle和unpickle。这意味着运行于tasklet内部的程序能够被持续不断的存储到文件或者字符串中。之后,其可以基于之前停止的点重新恢复运行,并且该行为不限于同一台机器。

【Scheduler

在Stackless Python之中存在一个简单的内置调度器(scheduler),其按顺序循环遍历调度器list以调度注册其中的tasklet。当一个tasklet被创建后,其自动被添加到调度器list的尾部。然而,调度器需要通过人为的主动调用才能开始工作。最简单的运行调度器的方式是采用stackless模块中提供的方法。该方法会移除主tasklet,然后轮流调度每一个注册的tasklet直到在调度器list为空。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10062 0
x3d
ActiveRecord模式整理
DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。
1109 0
python中math模块常用的方法整理
ceil:取大于等于x的最小的整数值,如果x是一个整数,则返回x copysign:把y的正负号加到x前面,可以使用0 cos:求x的余弦,x必须是弧度 degrees:把x从弧度转换成角度 e:表示一个常量 exp:返回math.
697 0
visual studio 自动整理代码
1.Ctrl+A选中要整理的代码 2.Ctrl+K 3.Ctrl+F 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/06/13/2297005.
1539 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13875 0
【整理】波罗密多老师python视频
作者:david_zhang@sh 【转载时请以超链接形式标明文章】链接:http://www.cnblogs.com/david-zhang-index/archive/2012/08/07/2627213.
634 0
Python学习资源整理
官方链接 Python官网 Pip 在线资源 菜鸟教程 慕课网 极客学院 伯乐在线 网易云课堂 实验楼 Web开发 Django Flask Sanic Tornado webpy Bottle 网页爬虫 网页抓取 urllib Req...
1245 0
+关注
摩云飞
十年磨一剑,我还差几年~~
266
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载