原创 muduo庫學習筆記十二:base庫之threadLocal

ThreadLocal類:線程本地存儲類 爲什麼需要這個類? 我們經常要用到"全局變量"以實現多個函數間共享數據。在單線程程序中,這樣做是沒有問題的,但是在多線程環境下,由於數據空間是共享的,因此全局變量也爲所有線程所共有。但有時,有些數

原创 linux多線程網絡庫-muduo庫學習

什麼是muduo庫   Muduo 是基於 Reactor 模式、線程安全的、支持多核多線程的簡單易用的網絡庫。符合現代C++編程規範、大量使用boost的開源網絡庫。 爲什麼學習muduo庫 muduo庫對學習linux下面向過程C++

原创 muduo庫學習筆記十一:base庫之Singleton

模板單例類:線程安全的單例模式實現 int pthread_once(pthread_once_t *once_control, void (*init_routine) (void)); 功能:本函數使用初值爲PTHREAD_ONCE

原创 muduo庫學習筆記十五:base庫之日誌庫二 LogStream類

LogStream類: muduo沒有用到標準庫的iostream,而是自己寫的LogStream類,這主要是出於性能。LogStream類,讓它如同C++的標準輸出流對象cout,能用<<符號接收輸入,cout是輸出到終端,而LogSt

原创 muduo庫學習筆記十六:base庫之日誌庫三 LogFile類

LogFile類: 1、在介紹Logger類時,我們提到Logger類可以自定義Output xx函數和Flush xx函數,由用戶來選擇日誌信息的輸出位置以及flush方式,例如在muduo庫學習筆記十三:base庫之日誌庫一 Logg

原创 system v共享內存與信號量綜合

關於System V共享內存和信號量的知識已經學過了,這次主要是綜合這兩者來解決一個問題達到靈活運用的目的,下面開始: 生產者消費者問題:  關於什麼是“生產者消費者”,應該都比較清楚,這裏還是先貼上百度百科對它的描述: 下面用圖來說明

原创 System V信號量解決哲學家就餐問題

一、哲學家就餐問題: 五個哲學家圍在一個圓桌就餐,每個人都必須拿起兩根筷子才能用餐,當每個人都先拿起左筷子,等待右筷子的時候就會造成死鎖。   解決方案僅當一個哲學家兩邊筷子都可用時才允許他拿筷子就餐。 二、代碼: #include<

原创 SOCKET網絡編程二:點對點聊天程序

1、要進行點對點聊天,首先需要既能發送,又能接收,如果發送接收放在一個進程有可能導致數據包丟失,因此需要新開一個進程,一個進程在套接字上接收,一個進程在套接字上發送。 2、父進程和子進程是可以共享文件描述符的。 3、fork調用的一個奇妙

原创 SOCKET網絡編程三:TCP粘包問題處理

TCP是字節流協議,原始數據之間是沒有邊界的。 發送端爲了將多個發往接收端的包,更加高效的的發給接收端,於是採用了優化算法(Nagle算法),將多次間隔較小、數據量較小的數據,合併成一個數據量大的數據塊,然後進行封包。 所謂粘包問題本質還

原创 muduo庫學習筆記一:編譯安裝

開發環境準備: 使用Vm虛擬機,安裝CentOS release 6.5 (Final)版本 muduo庫整個項目使用cmake編譯,所以需要先安裝cmake。 使用yum安裝,安裝前確保配置了可用的yum源。 安裝完cmake,我們便

原创 C++模板類中迭代器用法備忘

模板類中的迭代器前一定要加typename,否則編譯不通過。 typename vector<T >::iterator it;

原创 muduo庫學習筆記九:base庫之BlockingQueue

BlockingQueue類:使用條件變量實現的無界隊列 類圖: 其中: mutex_:互斥量 notEmpty_:條件變量 queue_:隊列 put:生產產品 take:消費產品 size:隊列大小 以生產者消費者模型來說明該類的使

原创 muduo庫學習筆記十四:base庫之日誌庫一 Logger類

muduo日誌庫概述: C++ 採用stream風格,這樣用起來更自然,不必費心保持格式字符串和參數類型的一致性,可以隨用隨寫,而且是類型安全的。stream風格的另一個好處是當輸出的日誌級別高於語句的日誌級別時,打印日誌是個空操作,運行

原创 常見併發服務器實現方案分析

首先,我們要清楚,什麼是併發?什麼是多線程?爲什麼需要多線程?爲什麼需要併發服務器? 爲什麼要使用多線程技術 爲什麼多線程會提高響應速度? 我們知道,線程一般分爲:I/O線程(這裏特指網絡I/O,每個reactor就是一個IO線程);計算

原创 System V共享內存

共享內存:是最快的IPC形式,一旦這樣的內存映射到共享它的進程的地址空間,這些進程間的數據傳遞不再涉及到內核,不用通過執行進入內核的系統調用來傳遞彼此的數據。 mmap函數: 功能:將文件或者設備空間映射到共享內存區。 void*mma