以libevent网络库为引:网络通讯和多线程

1. windows下编译及使用libevent  http://www.cnblogs.com/luxiaoxun/p/3603399.htmlhtml

2.  <<libevent学习资料>> http://blog.csdn.net/tge7618291/article/details/7698813windows

3. 源代码编译安装Memcache及libevent库依赖性的解决实例 (安装libevent) http://www.tudou.com/programs/view/yY21BGwIgLU 缓存

http://libevent.org/上下载最新的libevent, 如 libevent-2.0.22-stable.tar.gz。而后解压,按照README里面的步骤安装。性能优化

4.  Programming with Libevent  http://www.wangafu.net/~nickm/libevent-book/服务器

 Learning Libevent多线程

A Libevent Reference Manual异步

 5. libevent简介和使用 http://www.open-open.com/lib/view/open1386510630330.htmlasync

 

 

 

————————————————————————————————————————————————————————————post

f1. 浅谈Volatile与多线程 http://renyan.spaces.eepw.com.cn/articles/article/item/86826性能

  在C/C++中,若是想把一个变量声明为volatile,就至关于告诉编译器这个变量是“易变的”,他随时可能在其余地方被修改,因此编译器不能对其作任何变化:即每次读写该变量时都必须对其内存地址直接进行操做,而且因此对该变量的操做都必须严格按照程序中规定的顺序执行。举例来讲,编译器的经常作的一种性能优化就是把需频繁读取的变量缓存到寄存器中,以提高访问速度。但若是该变量的值随时可能在片外被改变的话,那么就有可能出现被缓存的值并非该变量的最新值状况,从而出现运行错误。在这种状况就须要用volatile关键字来修饰这个变量,以确保编译器不会对该变量读写操做进行任何缓存优化。另外一个例子就是内存映射I/O操做。以下代码所示:
Int *p = get_io_address();
Int a, b;
A = *p;
B = *p;
P是一个指向硬件I/O端口的指针,该端口的值在每进行一次读操做后都会变化。这个程序连续对该端口进行两次读取操做已将两个不一样的值分别赋值给a和b。若是不把a和b声明为volatile的话,编译器可能会”自做聪明”地认为两次从p读取的值都是同样的,从而把*b=*p优化成b = a,最终致使程序出错。
 
然而:
虽然C/C++中volatile关键字对这种“易变“的读写操做能起到必定的保护,但他却并不适用于多线程程序中共享变量的同步操做。究其根源,就在于C/C++标准中并无volatile赋予原子性和顺序性的语义。

更多的解释见原文http://renyan.spaces.eepw.com.cn/articles/article/item/86826

 

f2.几种服务器端IO模型的简单介绍及实现 http://www.cnblogs.com/luxiaoxun/p/3691800.html

服务器端几种模型:

一、阻塞式模型(blocking IO) 二、多线程的服务器模型(Multi-Thread) 三、非阻塞式模型(Non-blocking IO) 四、多路复用IO 五、使用事件驱动库libevent的服务器模型 六、信号驱动IO模型(Signal-driven IO) 七、异步IO模型(asynchronous IO)

相关文章
相关标签/搜索