多線程和單線程的理解

多線程:

  優點:

    1. 可以充分利用CPU多核優勢。

            2. 編程難度低,JAVA爲例。可以利用同步阻塞式的IO模型。

  缺點:

    1. 線程數量過多時,線程間被操作系統調度,切換線程時會存在性能消耗

            2. 多線程併發操作操作同一份數據時,需要考慮線程的安全性問題。

      技巧:

    1. 使用線程池,控制線程數量不要過多。

 

單線程:

  優點:

    1. 不存在多線程併發操作同一份內存數據的問題。

            2. 單線程模型一般配合異步非阻塞IO模型,比較適合IO密集型業務。

      缺點:

         1. 無法利用多核CPU的優點。

             2. 異步非阻塞的IO編程模型,編程難度比較大。

      技巧:

             1. 多進程模式配合單線程模型,充分利用多核。

             

NodeJS / Redis 的實現方案:

   目前來看是我認爲最好的線程模型,幾乎解決了所有的缺點。充分利用多核,又能充分利用異步IO

       一個主線程+多個Workder線程

       1.  主線程:異步非阻塞IO,主要負責處理IO請求。適合IO密集型場景。

   2.  async / await 語法糖,解決了異步編程中的回調問題。讓異步代碼可以使用 同步的編程思維

       3.  對於CPU耗時的任務,分配到Worker線程中進行處理。適合CPU密集型場景。

       4.  Worker線程與主線程之間使用postMessage的方式進行通信,數據副本。避免了多線程併發安全性問題。

       5.  主線程往Workder線程中postMessage大量數據時,可以採用數據控制權轉移的模式。一旦轉移,主線程就無法再使用這些二進制數據了。

       

 

技巧:

   工作線程數量等於CPU數量。避免CPU進行反覆進行線程切換。

 

 

 

 

 

     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章