zoukankan      html  css  js  c++  java
  • 多线程和单线程的理解

    多线程:

      优点:

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

         

  • 相关阅读:
    VC 中Combo Box的使用 Chars
    毕业论文摘要的书写方法和技巧 Chars
    VC调用DLL Chars
    《CLR via C#》Part1之Chapter3 共享程序集和强命名程序集(二)
    委托的使用(转)
    新概念系列之《Lesson 133 Sensational news》
    《CLR via C#》Part1之Chapter2 生成、打包、部署及管理应用程序及类型
    新概念系列之《Part2 Lesson 17 Always young》
    新概念系列之《Part2 Lesson 4 An exciting trip》
    新概念系列之《Part2 Lesson 16 A polite request》
  • 原文地址:https://www.cnblogs.com/lhp2012/p/14285986.html
Copyright © 2011-2022 走看看