多線程使用分析

多線程分析

怎麼使用多線程?咱們必須先從什麼狀況下能用多線程,什麼狀況下不能用多線程提及。多線程

多線程不能作什麼

常見的多線程模型,對於每一個處理任務創建一個線程去處理,即Request Per Thread
這個傳統的多線程模型能夠針對3個場景出現的問題:
1. 對於每一個鏈接創建一個線程
這個模型,創建的線程數即鏈接數會受到操做系統的進程空間限制,建立的鏈接個數也會有限制。
2. 對於計算密集型,每一個計算創建一個線程
線程若是超過了CPU同時並行運行的數量時,線程之間的上下文切換的開銷將會加大,吞吐量則會降低。
3. 若是對於IO密集型,則徹底沒有必要用多線程,使用多線程只會使線程同時阻塞在IO上併發

多線程的合理場景

多線程適合既有CPU操做,又有IO操做的場景異步

對於線程能夠分爲三類:高併發

  1. IO線程,專門負責處理IO的操做線程能夠容許IO阻塞的讀寫操做
  2. 計算線程,只處理CPU和內存之間的計算任務,不作任何與IO相關的阻塞操做
  3. 控制線程,使用epoll原語處理IO事件,協調IO線程和計算線程之間的同步和異步操做

常規的模型:使用專用處理用戶請求的IO線程去處理高併發的用戶請求,把請求經過隊列的形式進行保存,用適合CPU並行數量的線程池從隊列裏獲取請求去執行,最後若是須要進行本地IO讀寫,則須要使用單獨的IO線程去讀寫本地文件。操作系統

相關文章
相關標籤/搜索