Linux libaio

Linux aio是Linux下的异步读写模型。
对于文件的读写,即使以O_NONBLOCK方式来打开一个文件,也会处于”阻塞”状态。因为文件时时刻刻处于可读状态。而从磁盘到内存所等待的时间是惊人的。为了充份发挥把数据从磁盘复制到内存的时间,引入了aio模型。linux下有aio封装,但是aio采用的是线程或信号用以通知,为了能更多的控制io行为,可以使用更为低级libaio。
一、基本函数与结构
1. libaio函数
extern int io_setup(int m...

nodejs V8 Persistent句柄与GC

在nodejs中,常常会遇到ObjectWrap的C++ Module,即用一个Persistent句柄引用一个携带C/C++指针的对象,并设定该Persistent句柄的WeakCallback,当Persistent被孤立时,删除指针,并Dispose句柄。一般来说凡是C++/Native的Module(如PostgreSQL,Memcache等等)的都会有Persistent释放问题。
测试发现,因为GC的延迟常常会使得有效的指针堆积如山,由heap.cc可以得知V8的在台式机上的GC策略为...

javascript V8惊人的性能

今天测试了一下V8,虽然一直听说和感觉到V8快,但测试后发现性能超过C++ STL,甚至超过了C函数。着实惊人。
一、测试代码:
1. C++:test.cc
#include <sys/time.h>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <list>
#include <string>
#include <map>...

Linux下使用inotify监控文件动作

在日常应用中,常常会遇到以下场景,监控文件夹A,若文件夹中的B文件发生变化,则执行C命令。Linux下可以通过inotify完成该功能。
自从Linux kernel 2.6.13起,inotify以作为内核的一部份,同时需要glibc 2.4以上版本。
1. 相关函数
inotify_init() – 创建一个inotify实例
inotify_add_watch(int fd, const char *pathname, uint32_t mask) – 加入文件或目录到in...

Ruby C++ 扩展

早年写过用C++ + SWIG写Ruby插件的文,但实际中还是以原生C++写Ruby扩展,因为也相当简单。但长久没用还是会忘记,不得不翻以前的老代码回忆,写下这篇博文,若下次再忘记,也不至于去翻仓库。
建立 extconf.rb
require 'mkmf'
$libs = '-lstdc++'
create_makefile 'foo'
建立 foo.cc
#include <ruby.h>
VALUE plus(VA...

Vim插件Advancer Abbreviation 1.0.3

名称: Advancer Abbreviation
类别: plugin
版本: v1.0.3
作者: JiangMiao
更新: 2011-06-06
兼容: vim 7.0+
下载地址:
Github: https://github.com/jiangmiao/advancer-abbreviation
Vim: http://www.vim.org/scripts/script.php?script_id=3598
Vim代码片段工具
Advancer Abbreviation
========...

Vim脚本括号自动完成的实现与加强

括号是编程中最常接触的特殊符,因其往往成对出现,成对删除的特性,加上Vim强大的自定义功能,实现括号的自动完成,成对删除等各种功能,大大减少了编程手指负担。本文介绍如何对小括号进行设计达到上述功能,加深对Vim脚本的理解。
一、括号自动完成与加强
1. 括号自动完成
功能描述:当输入(时自动生成(),并使光标指向),系统保持在insert mode
分析:当键入(时,只需模拟输入()并使光标回退一个字符即可
代码1:
inoremap ( ()<LEFT>
2. 重复键入括号自...

编程字体推荐:ProFont

编程一路用过不少字体, 从Windows的Fixed,Courier, Consolas到Linux下的Dejavu Mono, Inconsolata,
如今使用的英文字体为ProFont,一款点阵等宽小字体。
可惜使用使用ProFont有一个缺点,因为字体属于小字体,因此同大小的中文字体显得偏小。
ProFont的显示效果:
xterm下的vim 使用ProFont字体
xorg下的gvim 使用ProFontWindow字体
从截图看ProFont比ProFontWindow好看一点,但不清楚为何...

关于抛硬币的思考

关于抛硬币连续抛了3次,均为正面,请问抛第4次正面的概率有多少。我设计了5个场景进行探讨
场景一:
问:一枚硬币连续抛了3次,均为正面,请问抛第4次正面的概率有多少。?
答案:50%
分析:
假设硬币抛2次,则有4种情况:正反,正正,反正,反反。
当第1次正确立后,则只有2种情况:正反,正正,而两者的机会是相等的。
同理,正正正反,正正正正的概率也是相等的,即第4次正面的概率为50%。
场景二:
问:小明猜硬币,每次必猜反,已经连错3次,请问第四次猜对的概率是多少?
答案:1-(0.5^4) = 93.7...

lua 学习

最近写C++程序打算支持一些脚本,试了下ruby,1.9M的体积,..,随想到号称迷你的lua,果然很迷你,只有100~200K,虽然lua在WOW中很火,可本人并没有接触过过,乘这个机会学习下lua。
lua版本 5.1.4
一、预备知识
关键词:
and break do else elseif
end false for function if
in local n...