摘要:
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。缺点:只支持单向数据流;只能用于具有亲缘关系的进程之间;没有名字;管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。# 信号量( semophore ) : 信号量是一个计数器,可以用 阅读全文
摘要:
以前在meego性能优化团队实习的时候,我曾经被要求计算一个软件调用malloc的次数和耗时,并探讨如果使用内存池对软件可能产生的影响。通用的讲,我需要将某些函数的调用重定向到我们自己定义的替代函数中来,这样的替代函数就叫做包装函数(wrapper function)。对malloc这个具体的场景来说我们不仅需要hack函数的调用,还要获取原本glibc定义的“real malloc”的句柄(函数指针)以使程序正常运行下去,当然如果这一切可以在不需要重新编译软件的前提下完成就更好了。我总结了Linux环境下包装函数的几种实现方法:1.LD_PRELOAD+dlsym这对组合中,LD_PRELO 阅读全文
摘要:
FreeTDS是一个帮助linux和Unix用户连接MS SQL Server和Sybase的开源项目。常用于linux和Unix平台上的web server将上述两种数据库的数据展示在网站中。从技术层面上讲FreeTDS实现了Tabular Data Stream protocol,也因此得名。Tabular Data Stream protocol用于在数据库服务器和客服端间传输数据,由Sybase公司设计和开发并最先使用于Sybase关系数据库中,后来MS SQL Server也使用了这一协议。要使PHP支持FreeTDS,有三种API可以选择:db-lib,ct-lib和ODBC。1、 阅读全文
摘要:
名称 epoll - I/O 事件通知机制概要 #include <sys/epoll.h>描述 epoll是poll的升级版,支持边缘触发和水平触发的就绪通知方式,并且拥有良好的扩展性,可以监听大量文件描述符。一个epoll实例由下列系统调用创建和管理: * epoll实例由 epoll_create创建, 返回新建epoll实例的文件描述符 (最新的epoll_create1扩展了epoll_create的功能.) * 使用epoll_ctl在epoll实例中注册文件描述符。一个epoll实例上的文件描述符集合被称为“epoll集合”。 * 最后调用epoll_wait等待事件 阅读全文
摘要:
同步阻塞IO在等待数据就绪上花去太多时间,而传统的同步非阻塞IO虽然不会阻塞进程,但是结合轮询来判断数据是否就绪仍然会耗费大量的CPU时间。多路IO复用提供了对大量文件描述符进行就绪检查的高性能方案。selectselect诞生于4.2BSD,在几乎所有平台上都支持,其良好的跨平台支持是它的主要的也是为数不多的优点之一。select的缺点(1)单个进程能够监视的文件描述符的数量存在最大限制(2)select需要复制大量的句柄数据结构,产生巨大的开销 (3)select返回的是含有整个句柄的列表,应用程序需要遍历整个列表才能发现哪些句柄发生了事件(4)select的触发方式是水平触发,应用程序如 阅读全文
摘要:
今日看见CSDN博客主页上的一篇推荐博文,结果因为博文的错误理解遭来技术宅们的口诛笔伐。博主文中的一句“建立在栈上的数组大小肯定是在编译时候就确定的”为其带来了飞来横祸。http://blog.csdn.net/woshishenguanyear/archive/2011/06/13/6542527.aspx在初学C语言时,我们为了方便记忆,往往认定静态分配数组在栈上,动态分配数组在堆上,这确实为实现21天学会C语言的宏伟目标提供了便利。但是实际上C99标准已经允许程序在栈上分配变长数组。/*s1ands2aretwostrings(char*)*/charstr[strlen(s1)+str 阅读全文