zoukankan      html  css  js  c++  java
  • 并发、并行、串行概念

    使用多线程编程的主要目的是为了在有限的时间内充分利用计算机的处理能力做更多的事情(后文描述更精准)。而线程执行必须要先获取cpu的执行权,只有获取了cpu的执行权的线程才能被执行。了解了线程执行的基础概念之后再看一下什么是并发、并行、串行。

    并发:

    在单核CPU中,系统调度只能在同一时间执行一个线程,此时执行的多线程,其实是cpu的控制权在多个线程之间来回快速切换。造成看起来就像是同时执行了多个线程的幻觉。

    栗子:

    现在有ABC三个线程,三个线程之间首先会争夺CPU的控制权(假设是单核CPU),当A首先抢到控制权,那么B和C就会等待,等B抢到控制权A和C就会等待。这样三个线程之间快速切换,在同一时间内,只会有一个线程在运行。这就是并发。

    并行:

    在多核CPU中才会有并行,因为不同线程可以获取不同cpu的控制权,有了控制权就能被执行。简单的讲,并行就是在同一时间内,有多条线程同时执行。(注意:和并发有区别)

    串行:

    这个概念更好理解了,ABC几个线程,A先获取了CPU的控制权,那么A线程就会被执行,A执行完毕之后,B抢到控制权,在执行B线程,B线程执行完之后,再执行C线程……就按单核CPU线程排队办理业务就行了。

    线程越多就越好?

    开头说了使用多线程是为了在有限时间内处理更多的事情。这句话其实并不是特别准确,线程并不是越多越好

    (1)首先每多开一个线程就会多占用一部分内存,线程越多,资源消耗也就越大。

    (2)线程越多,CPU控制权需要在多个线程之间进行来回切换,而线程之间的切换也会消耗许多的时间,CPU的利用率反而下降了。

    (3)线程太多,CPU占用如果达到100%,长时间的满载状态也会加速计算机硬件老化。

    (4)反正就是不好

  • 相关阅读:
    POJ 3164 Command Network 最小树形图 朱刘算法
    区间dp专题
    HDU2896病毒入侵AC_自动机
    HDU2222Keywords Search AC_自动机
    Linux cat命令参数及使用方法详解
    MySQL分支Percona, cmake编译安装
    PHP网站简单架构 – 单独跑php-fpm
    Tengine – Nginx衍生版
    jemalloc优化MySQL、Nginx内存管理
    TCMalloc优化MySQL、Nginx、Redis内存管理
  • 原文地址:https://www.cnblogs.com/wgty/p/12810493.html
Copyright © 2011-2022 走看看