2020-01-16 16:21
⁄ 工业·编程
⁄ 共 606字
Python作为动态解释性语言,其运行机制可参考下图(图片来自网络,其中的“编译器”是对解释器的广义称呼):
都说解释器慢,Python也有想办法提高一下运行速度的,那就是使用pyc文件。这点参考了JAVA的字节码做法,但并不完全类同。
我们编写的代码一般都会保存在以.py为后缀的文件中。在执行程序时,解释器逐行读取源代码并逐行解释运行。每执行一次,就重复一次这个过程,这其中耗费了大量的重复性的解释工作。为了减少这一重...
Python, 原理阅读全文
2020-01-15 16:27
⁄ 工业·编程
⁄ 共 498字
Python有好几种版本的解释器:
CPython:官方版本的解释器。这个解释器是用C语言开发的,所以叫CPython。CPython是使用最广的Python解释器。我们通常说的、下载的、讨论的、使用的都是这个解释器。
Ipython:基于CPython之上的一个交互式解释器,在交互方式上有所增强,执行Python代码的功能和CPython是完全一样的。CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
PyPy:一个追求执行速度的Python解释器...
Python, 编译器阅读全文
2020-01-14 13:29
⁄ 工业·编程
⁄ 共 1129字
一年前我开始学习go语言的时候,如获至宝,既有python的编码效率,又带来性能的15倍提升。尤其是在异步编程方面,可以使用channel同步线程,不必加锁可以充分利用cpu多核计算,真是没有弱点。
后来慢慢了解到,这种无锁异步编程的思想,源自一门叫做erlang的语言,Erlang更加了不起。除了异步编程之外,这门语言天生支持分布式,单机上开发的软件,可以不加修改地运行在集群上,另外还支持软件版本的热升级,自带的OTP框架支持...
Erlang, Go, 比较阅读全文
2020-01-13 13:23
⁄ 工业·编程
⁄ 共 1848字
虽然Erlang有很长的历史,并且也被应用到很多领域中,在编程语言众多,新编程语言还在继续涌现的今天,Erlang却并不为普通大众所知,仅仅在一个小众圈子里面备受推崇。Erlang既是一个编程语言,更是一个操作系统加一整套工具集。对于服务器端的各种编程任务,Erlang使不可能做到的事情成为了可能,让可能做到的事情变得更简单。
首先举个生活中的例子吧,当我们打电话的时候当我们发短信的时候,我们很有可能正在使用基于Erlang...
Erlang阅读全文
2020-01-12 13:20
⁄ 工业·编程
⁄ 共 3024字
一、CouchDB项目
http://incubator.apache.org/couchdb/
CouchDB是一个"面向文档"的数据库,采用 ErLang 语言开发,文档的格式是一个JSON字符串(也可包含二进制附件)。 底层结构是由一个"存储"(storeage) ,以及多个"视图索引"(view indexs)。 "储存"用来储存文件, "视图索引"用于查询处理。
CouchDB落实到最底层的数据结构就是两类B+Tree 。
CouchDB 能够适应非常广泛的...
Erlang, 开源阅读全文
2020-01-11 13:14
⁄ 工业·编程
⁄ 共 1563字
1、Erlang介绍
Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多...
Erlang阅读全文
2020-01-10 06:46
⁄ 工业·编程
⁄ 共 2116字
和SGI版的STL一样,leveldb内存分配也采用了memory pool的整理方式,减少内存不断分配释放过程中造成的空间零碎化和浪费。leveldb的内存池实现可参见arena.h和arena.cc,有关内存池的测试代码有arena_test.cc。arena内存池是leveldb的关键组件,是很多其他功能模块(class)的成员,在cache、memtable、table组件中均有使用。
先看arena的成员变量:
private:
// Allocation state
//当前内存池的池顶
cha...
Arena, leveldb, 内存池阅读全文
2020-01-09 06:42
⁄ 工业·编程
⁄ 共 3254字
一. 什么是内存池?
内存池(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。
通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。
内存池是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内...
Arena, 内存池阅读全文
2020-01-08 08:22
⁄ 工业·编程
⁄ 共 5407字
任何一个C程序要想要得到实现,都离不开背后的一套庞大的代码来进行支持(至少包括入口函数,以及其所依赖的函数所构成的函数集合等),这样一套背后代码被称为运行库,C语言的运行库叫做CRT(Runtime Library)。
C语言的运行库某种程度上就是C语言的程序和不同操作系统平台之间的抽象层。它将不同的操作系统API抽象成相同的库函数(银弹理论的又一次胜利)。比如可以在不同OS上使用fread来读取文件,而事实上,fread在不同的...
glibc, MSVC, 区别阅读全文
2020-01-07 09:25
⁄ 工业·编程
⁄ 共 8813字
RTP(Real-timeTransportProtocol)是用于Internet上针对多媒体数据流的一种传输协议,做流媒体传输方面的应用离不开RTP协议的实现及使用,为了更加快速地在项目中应用RTP协议实现流媒体的传输,我们一般会选择使用一些RTP库,例如使用c++语言编写的JRTPLIB库,网上关于RTP协议以及JRTPLIB库的介绍已经很多了,在此我也不再赘述,本文主要介绍实现了RTP协议的另一种开源库——ORTP库,这个库是纯使用c语言编写。在此对该库进行一...
Ortp阅读全文