程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 消息隊列,消息隊列java

消息隊列,消息隊列java

編輯:C++入門知識

消息隊列,消息隊列java


之前在設計消息隊列的時候,用的雙緩沖,保持一個讀線程,一個寫線程!! 讀線程對read_list進行操作,寫線程對write_list進行操作,保持一個隊列的完整行就ok!

        比如如果想保持write_list一致,就是在插入操作的時候枷鎖,在read_list為空的時候需要和write_list進行交換,也需要枷鎖!!這樣就保證了很少的線程沖突!!!當時的消息隊列的雙緩沖使用std::list進行設計!

        第二個版本的消息隊列,進行了很大程度上的改進,使用了三個緩沖隊列,一個讀隊列,一個寫隊列,一個緩沖隊列,三個隊列分別用數組形式體現,枷鎖只要保證緩沖隊列一致既可,即寫隊列向緩沖隊列提交數據的時候,需要枷鎖,讀隊列再向緩沖隊列交換數據的時候,需要枷鎖!想比較於上面的方法,枷鎖次數明顯減少,並且使用數組的形式,較std::list更為高效!這個消息隊列在原公司的雙緩沖隊列的基礎之上,進行設計!

        給出測試代碼!和部分接口!

+ View Code

  接口:

class DuplexList {   public:     DuplexList(int size = 1024);     virtual ~DuplexList(void);       virtual int append(CommonItem item);     virtual int peek(CommonItem &item);   protected:     virtual int swap(CommonItem &item);     virtual int submit();   protected:     CommonList *read_list_;     CommonList *share_list_;     CommonList *write_list_;     Mutex _switch_mutex;     int peek_index_; };

    做了一下午的測試,沒有問題,傳遞10w條消息大概使用20ms左右!這個性能可以了!

       之前在語言的選擇上面做了很長時間的猶豫,一些java的朋友勸我說,一個消息隊列的錯誤,那麼整個游戲就會崩潰!勸我使用java的集成結構!! 不過最終我還是堅持了C++,底層代碼使用C++,邏輯使用lua來編寫!只是在AI的問題上面還有很多猶豫!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved