多线程和单线程的理解


多线程:

  优点:

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

 

 

 

 

 

     


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM