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

         

  • 相关阅读:
    AWK用法详解
    追加内容到指定的行
    自动scp(二)
    Spring 容器IOC解析及简单实现
    Spring 容器AOP的实现原理——动态代理
    Try语句中有return,那么finally中的code会执行吗?什么时候执行?
    Java中HashMap和TreeMap的区别
    HashTable和HashMap的区别详解
    ArrayList、LinkedList与Vector的对比
    事务是什么
  • 原文地址:https://www.cnblogs.com/lhp2012/p/14285986.html
Copyright © 2011-2022 走看看