線程、socket、stl 以及並發設計

來源:互聯網
上載者:User

這裡的線程操作不是簡單的pthread_create建立一個線程這樣的講解。針對線程建立合理的模型,利於並發設計:

 

案例:

     主流程庫處理模型處理完之後,需要進行圖片壓縮和入庫操作,那麼我們需要採用半同步/半非同步執行緒模式;該模型主要目的在於將可能引起阻塞的操作剝離,由單獨的處理線程來進行處理並反饋.

     半同步/半非同步模型核心在於具備 同步層/隊列層/非同步層.

     對於ACE架構來說,任何線程可以通過繼承ACE_TASK進行實現,而隊列層可以由ACE_MESSAGE_BLOCK進行封裝實現。

     因為非同步層往往意味著線程池的處理、同步集合的處理,由此如下內容來完成同步操作:

     1.ACE_Condition<ACE_Thread_Mutex> work_conf 來完成變數觸發的監控,非同步層的處理結果需要反饋給同步層,這裡採用該變數work_conf.single()來完成變數觸發傳輸的過程。

     2.線程池隊列,使用 ACE_Unbounded_Queue<Worker*> workerpool_; 其中workpool.is_empty()用於判斷線程池是否滿,dequeue_head(void*)用於分配一個線程池的線程對象;enqueue_tail(void*);將處理完的線程放入線程池中。 

     而同步層的設計中,最重要的便是考慮到非同步層的反饋的介面操作。 

     而領導者/跟隨者模型中,同樣使用到線程池,區別在於其沒有隊列層,其沒有一個獨立的線程用來監控資訊並分發訊息,線程中隨機選舉一個領導者線程來處理主要邏輯,有策略的變更角色以實現。

 

     可對應Proactor與 Reactor 進行觀察  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.