以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)

相關文章
相關標籤/搜索