多线程和单线程的理解

多线程:

  优点:

    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进行反复进行线程切换。

 

 

 

 

 

     

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