【整理】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。 less

【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为空。

相关文章
相关标签/搜索