摘要: libev是Marc Lehmann用C写的高性能事件循环库。通过libev,可以灵活地把各种事件组织管理起来,如:时钟、io、信号等。libev在业界内也是广受好评,不少项目都采用它来做底层的事件循环。node.js也是其中之一。 学习和分析libev库,有助于理解node.js底层的工作原理,同时也可以学习和借鉴libev的设计思想。本文是最近在学习libev源码的一些心得总结吧。libev示例先上一个例子,看看libev是怎么使用的吧。12345678910111213141516171819202122232425262728293031323334353637383940414243 阅读全文
posted @ 2013-05-03 23:56 qimi 阅读(3480) 评论(0) 推荐(2) 编辑
摘要: libev 设计分析此文主要分析libev 的设计架构与算法实现,阅读这篇文章之前,你需要对libev 的使用有大致的了解;libev 提供了很多watcher 供开发者使用 ,以下仅对最重要最常用的几个watcher 机制进行分析,从中我们可掌握整个libev的设计思想,如果你想了解更多,可查阅libev的相关代码或文档。ev_io_watcher如我们所知,新的fd总是系统可用的最小fd ,所以这个长度可以进行大小限制的,我们用一个连续的数组来存储fd/watch 信息,如下图所示,我们用anfd[fd] 就可以找到对应的fd/watcher 信息,当然可能遇到anfd超出我们的buffe 阅读全文
posted @ 2013-05-03 15:15 qimi 阅读(843) 评论(0) 推荐(1) 编辑
摘要: 这里选取的版本为最新版:libev-4.04。libev的代码很简练,除了对高效I/O模型等的封装文件,核心文件就两个:ev.h和ev.c,其中ev.c大概4000行左右。代码大量用到了宏,并且宏还嵌套了宏,为了便于理解libev的代码,这里对宏进行了还原。ev_watcher结构体(其成员为其它结构的公共部分):typedefstruct ev_watcher {int active;//激活标识int pending;//等待事件数int priority;//优先级void* data;//void (*cb)(struct ev_loop* loop, struct ev_watche 阅读全文
posted @ 2013-05-03 15:06 qimi 阅读(672) 评论(0) 推荐(0) 编辑
摘要: 友元函数和友元类采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元函数:友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在 阅读全文
posted @ 2013-05-02 20:23 qimi 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 十个必用的 Vim Pluginhttp://www.openfoundry.org/en/tech-article/2244vimrc配置如下(为简单起见,采取注释的方式直接说明):if(has("win32") || has("win95") || has("win64") || has("win16")) "判定当前操作系统类型 let g:iswindows=1else let g:iswindows=0endifset nocompatible "不要vim模仿vi模式,建议设置,否则 阅读全文
posted @ 2012-12-29 12:22 qimi 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.chinaunix.net/space.php?uid=12076195&do=blog&cuid=548927写的好详细!二.Linux 2.4内核中的轻量进程实现最初的进程定义都包含程序、资源及其执行三部分,其中程序通常指代码,资源在操作系统层面上通常包括内存资源、IO资源、信号处理等部分,而程序的执行通常理解为执行上下文,包括对cpu的占用,后来发展为线程。在线程概念出现以前,为了减小进程切换的开销,操作系统设计者逐渐修正进程的概念,逐渐允许将进程所占有的资源从其主体剥离出来,允许某些进程共享一部分资源,例如文件、信号,数据内存,甚至代码,这 阅读全文
posted @ 2012-12-26 00:54 qimi 阅读(534) 评论(0) 推荐(0) 编辑
摘要: #define container_of(ptr, type, member) ({ / const typeof( ((type *)0)->member ) *__mptr = (ptr); / (type *)( (char *)__mptr - offsetof(type,member) );}) #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)注意((type *)0)的使用。比如:((void *)0)();((TYPE *)0)->MEMBER;--->这是指MEMBER在 阅读全文
posted @ 2012-12-22 14:32 qimi 阅读(774) 评论(0) 推荐(0) 编辑
摘要: Yahoo! 的 Exceptional Performance 团队为 Web 页面性能优化带来最佳实践,旨在提高网站性能。Excetional Performance 团队总结出了一系列可以提高网站速度的方法,可以分为 7 大类 34 条。包括内容、服务器、Cookie、CSS、JavaScript、图片、移动应用等七部分。Web 页面性能优化之内容1、尽量减少 HTTP 请求次数终端用户响应的时间中,有 80% 用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash 等。通过减少页面中的元素可以减少 HTTP 请求的次数。这是提高网页速度的关键步骤。减少页面组件的方法 阅读全文
posted @ 2012-12-10 00:42 qimi 阅读(569) 评论(0) 推荐(0) 编辑
摘要: 人们一提到.htaccess配置文件,首先映入他们脑海的就是用mod_rewrite进行URL地址重定向。对mod_rewrite的看法各不相同,为了就人们对mod_rewrite是怎么认识的有一个快速的看法,我在twitter上搜索了一下"mod_rewrite",并且将我写这篇文章时的前几个搜索页面的结果找出来:midk:啊!.hatccess和mod_rewrite是如此的痛苦……basterzenbach:我喜欢mod_rewrite。在我的有生之年,我都可以用它工作,并且还是不能精通它——太强大了。mikemackay:仍然喜欢mod_rewrite的灵活性——又 阅读全文
posted @ 2012-11-03 19:56 qimi 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 大多数人都将开放源代码与Linux联系在一起,但开放源代码社区也为Windows平台开发了大量优秀软件,例如办公软件OpenOffice和浏览器火狐。下边将为读者介绍10款优秀的Windows平台开放源代码软件:1、VLCVLC是最有影响力的多媒体软件之一,支持众多音频和视频格式,其中包括H.264、Ogg、DivX、MKV、TS、MPEG-2、MP3、MPEG-4和AAC。VLC支持流式技术和电视捕捉卡。VLC的功能不仅仅局限于查看、观看多媒体文件,还能在不同格式间进行转换。2、GnumericGnumeric是GNOME Office软件包的电子表格部分,也是一款独立软件。Gnumeric 阅读全文
posted @ 2012-10-06 20:01 qimi 阅读(354) 评论(0) 推荐(0) 编辑