上一页 1 2 3 4 5 6 7 8 9 ··· 26 下一页
摘要: 写了一个测试磁盘寻道(+旋转)时间的程序,方法如下:创建一个大文件(如果太小,文件所有内容都在一个磁道上),使O_DIRECT打开文件,随机选择一个位置(4k的倍数),读取4K(文件系统块)大小的数据。测试程序分别执行1、10、100、1000、10000次随机读文件操作,结果发现在1000次以内,消耗的时间总是1-3ms,超过10000才会略有大的增长,但也在1s范围内。发现DIRECTIO根本没有生效,百思不得其解。仔细阅读了man手册上关于O_DIRECT的说明:Try to minimize cache effects of the I/O to and from this file. 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(586) 评论(0) 推荐(0)
摘要: 注:上图由XMind软件绘制,向大家强烈推荐,http://www.xmind.net/ 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(157) 评论(0) 推荐(0)
摘要: 安装与使用参考 【1】http://clewn.sourceforge.net/install.html 【2】http://sourceforge.net/projects/clewn/files/vimGdb/ 【3】 http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-vimgdb/ 【3】中使用的是7.1版本的... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(360) 评论(0) 推荐(0)
摘要: B树实现的非回溯算法参考:http://blog.chinaunix.net/space.php?uid=20196318&do=blog&id=3030529 回溯的方式实现B树与非回溯算法相比,理解起来更为直观,而且插入时/删除时,需要分裂/合并的次数比非回溯算法要少,因为只有到必须分裂或合并的时候回溯算法才执行分裂或合并。当回溯算法从根向叶子下降后,还要向上回溯至根节点。如使用B树(B... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(254) 评论(0) 推荐(0)
摘要: B树的定义 假设B树的度为t(t>=2),则B树满足如下要求:(参考算法导论) (1)每个非根节点至少包含t-1个关键字,t个指向子节点的指针;至多包含2t-1个关键字,2t个指向子女的指针(叶子节点的子女为空)。 (2)节点的所有key按非降序存放,假设节点的关键字分别为K[1], K[2] … K[n], 指向子女的指针分别为P[1], P[2]…P[n+1],其中n为节点关键字的个数。... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(646) 评论(0) 推荐(0)
摘要: 关于listen的backup参数 listen的第二个参数,在网上有各种版本的解释,有人说是三次握手成功等待被accept的请求队列长度,有人说是尚未成功建立连接的队列长度,有人说是二者队列长度之和。 #man listen # man tcp 从man手册可以发现:从linux 2.2开始,backlog是指已经建立连接等待被accept的队列长度,而未成功建立连接的队列长度由tc... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(204) 评论(0) 推荐(0)
摘要: linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int poll(struct pollfd *fds,... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(177) 评论(0) 推荐(0)
摘要: 循环read(write) 在网络应用程序中,通常需要重复的调用read/write来读取到指定数量的数据,如下例: int wrapper_read(int fd, char *buf, int size) { int ridx = 0; int rlen = 0; while(ridx < size) { rlen = read(fd, buf + ridx, size – ri... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(282) 评论(0) 推荐(0)
摘要: 多线程在网络编程中作用重大,由于创建/销毁线程、线程间通信的开销小,目前很多网络服务器都是用多线程(线程池)的模式对外提供服务。linux上开发多线程程序多使用pthread库,本文主要讨论使用C++封装pthread库时可能出现的问题。 封装pthread库主要有两种思路,第一种是简单的封装接口,如下所示: class simple_thread_t { public: int star... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(200) 评论(0) 推荐(0)
摘要: 网络服务器的实现不外乎两种情况,一是为某个业务单端开发服务器,二是实现通用网络服务器框架,前者的设计可能很大程度的受业务需求的影响,而后者则要保证简单易用,稳定服务,最好还有不错的性能。 服务器框架的优势在于让使用者快速的进行开发,只需要做很少的事情即可完成服务器的开发。在整个服务模型中,只有对请求任务的处理是预先不可知的,其他的逻辑基本上是固定的,故在实现框架时,将实际的处理部分以回调的形... 阅读全文
posted @ 2013-04-19 14:12 ydzhang 阅读(165) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 ··· 26 下一页