自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员的自我修养

积跬步 积小流

  • 博客(9)
  • 资源 (1)
  • 收藏
  • 关注

原创 Libev源码分析05:Libev中的绝对时间定时器

Libev中的超时监视器ev_periodic,是绝对时间定时器,不同于ev_timer,它是基于日历时间的。比如如果指定一个ev_periodic在10秒之后触发(ev_now() + 10),然后将系统时间调整为去年的一月一号,则该定时器会在一年后才触发超时事件。(ev_timer依然会在10秒之后触发) 一:数据结构         超时监视器ev_ periodic结构:t

2015-10-31 11:30:38 3012

原创 Python深入:setuptools简介

Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时。用setuptools构建和发布的包与用Distutils发布的包是类似的。包的使用者无需安装setuptools就可以使用该包。如果用户是从源码包开始构建,并且没有安装过setuptools的话,则只要在你的setup脚本中包含一个bootstrap模块(ez_se

2015-10-30 23:27:13 12052

原创 Libev源码分析04:Libev中的相对时间定时器

Libev中的超时监视器ev_timer,就是简单的相对时间定时器,它会在给定的时间点触发超时事件,还可以在固定的时间间隔之后再次触发超时事件。         所谓的相对时间,指的是如果你注册了一个1小时的超时事件,然后调整系统时间到了去年的一月份,该超时事件依然会在1个小时之后触发。 一:数据结构1:超时监视器ev_timer结构:typedef struct ev_tim

2015-10-25 11:05:21 4346

原创 Libev源码分析02:Libev中的IO监视器

一:代码流程        在Libev中,启动一个IO监视器,等待该监视器上的事件触发,然后调用该监视器的回调函数。整个的流程是这样的:        首先调用ev_default_loop初始化struct  ev_loop结构;        然后调用ev_io_init初始化监视器中的属性,该宏主要就是调用ev_init和ev_io_set;        然后调用ev_i

2015-10-25 10:27:52 2772

原创 Python深入:Distutils安装包

一:简介         尽管Python标准库已经支持很多的功能,但是有时还是会需要以第三方模块的形式添加新的功能到Python中。         在最简单的场景中,是你要安装的模块,已经有了针对你的平台的安装版本,因此只需要像安装其他软件一样安装他们即可。比如针对Windows用户的安装程序,针对基于RPM的Linux用户的RPM包等等。这种情况,只需要将该安装包下载下来,直接安装即

2015-10-23 21:04:57 13511

原创 Python深入:修改Python搜索路径

当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块。可以通过sys.path查看这些路径,比如:>>> import sys>>> sys.path['', '/usr/lib/python2.7/site-packages/demo_nova_hooks-5-py2.7.egg', '/usr/lib64/python27.zip', '/usr/lib

2015-10-23 20:44:40 24594

原创 Python深入:Distutils发布Python模块

Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。 一:Distutils简介1.1概念和术语         对于模块开发者以及需要安装模块的使用者来说,Distutils的使用都很简单,作为一个开发者,除了编写源码之外,还需要:

2015-10-19 22:30:52 27125 5

原创 Libev源码分析03:Libev使用堆管理定时器

Libev中在管理定时器时,使用了堆这种结构,而且除了常见的最小2叉堆之外,它还实现了更高效的4叉堆。         之所以要实现4叉堆,是因为普通2叉堆的缓存效率较低,所谓缓存效率低,也就是说对CPU缓存的利用率比较低,说白了,就是违背了局部性原理。这是因为在2叉堆中,对元素的操作通常在N和N/2之间进行,所以对于含有大量元素的堆来说,两个操作数之间间隔比较远,对CPU缓存利用不太

2015-10-17 13:15:53 1821

原创 Libev源码分析10:libev中poll的用例

在Libev中,使用poll作为backend时,涉及到下面几种数据结构:int *pollidxs;int pollidxmax;struct pollfd *polls;int pollmax;int pollcnt;         polls就是struct pollfd结构的数组,pollmax是该数组的实际大小,pollcnt表示该数组中,有效结构的个数。也就是监控的

2015-10-11 13:37:50 927

柔性数组成员

C99中引入了柔性数组成员的概念。C99 中,结构体中的最后一个元素允许是未知大小的数组,称为柔性数组成员(flexible array member),柔性数组成员前面必须至少还有一个其他成员,而且柔性数组成员必须是结构体的最后一个成员。一个包含柔性数组成员的结构体或(递归的)包含这样结构体的联合体,不能成为一个结构体的成员或数组的元素。

2018-09-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除