多线程-程序、进程、线程与并行、并发的概念

多线程

本章要学习的内容:

  • 专题1:相关概念的理解
  • 专题2:多线程创建方式一:继承Thread类
  • 专题3:多线程创建方式二:实现Runnable接口
  • 专题4:Thread类的常用方法
  • 专题5:多线程的优点、使用场景、Thread的生命周期
  • 专题6:卖票案例、引出线程安全问题,引出同步机制
  • 专题7:使用同步代码块解决线程安全问题
  • 专题8:使用同步方法解决线程安全问题
  • 专题9:线程安全的懒汉式、死锁
  • 专题10:JDK5中Lock锁的使用
  • 专题11:线程的通信与基本举例
  • 专题12:JDK5.0新增两种创建多线程的方式
  • 专题13:本章随堂复习与企业真题

相关概念

  • 程序(program):为完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。

  • 进程(process):程序的一次执行过程,或是正在内存中运行的应用程序。如:运行中的QQ,运行中的网易云音乐。

    • 每个进程都有一个独立的内存空间,系统运行一个程序即是一个进程从创建、运行到消亡的过程。(生命周期)
    • 程序是静态的,进程是动态的。
    • 进程作为操作系统调度和分配资源最小的单位(亦是系统运行程序的基本单位),系统在运行时会为每个进程分配不同的内存区域。
    • 现代的操作系统,大都是支持多进程的,支持同时运行多个程序。比如:现在学习一边使用编辑器,一遍放着音乐,同时还运行这浏览器等软件
  • 线程(thread):进程可进一步细化为线程,是程序内部的一条执行路径。一个进程中至少有一个线程。

    • 一个进程同一时间若并行执行多个线程,就是支持多线程的。

    多线程-程序、进程、线程与并行、并发的概念_第1张图片

    • 线程作为CPU调度和执行的最小单位

    • 一个进程中的多个线程共享相同的内存单元,它们从同一个堆中分配对象,可以访问相同的变量和对象。

      这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患

    • 下图中,红框的蓝色区域为线程独享,黄色区域为线程共享。

      多线程-程序、进程、线程与并行、并发的概念_第2张图片

注意:
不同的进程之间是不共享内存的。
进程之间的数据交换和通信的成本很高

线程调度

  • 分时调度

    所有线程轮流使用CPU的使用权,并且平均分配每个线程占用CPU的时间。

  • 抢占式调度

    优先级高的线程以较大的概率优先使用CPU。如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

多线程程序的优点:

背景:以单核CPU为例,只使用单个线程先后完成多个任务(调用多个方法),肯定比用多个线程来完成用的时间更短,为何仍需多线程呢?

多线程程序的优点

  1. 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
  2. 提高计算机系统CPU的利用率。
  3. 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利与理解和修改。

补充概念

单核CPU和多核CPU

单核CPU,在一个时间单元内,只能执行一个线程的任务。例如,可以把CPU看成是医院的医生诊室,在一定时间内只能给一个病人诊断治疗。所以单核CPU就是,代码经过前面一系列的前导操作(类似于医院挂号,比如有10个窗口挂号),然后到CPU处执行时发现,就只有一个CPU(对应一个医生),大家排队执行。

这时候想要提升系统性能,只有两个办法,要么提升CPU性能(让医生看病快点),要么多加几个CPU(多整几个医生),即为多核的CPU。

问题:多核的效率是单核的数倍吗?譬如4核A53的CPU,性能是单核A53的4倍吗?理论上是,但是实际不可能,至少有两方面的损耗。

  • 一个是多个核心的其他共用资源限制。譬如,4核CPU对应的内存、cache、寄存器并没有同步扩充4倍。这就好像医院一样,1个医生换4个医生,但是做B超检查的还是一台机器,性能瓶颈就从医生转到B超检查了。
  • 另一个是多核CPU之间的协调管理损耗。譬如多个核心同时运行两个相关的任务,需要考虑任务同步,这也需要消耗额外性能。好比公司工作,一个人的时候至少不用开会浪费时间,自己跟自己商量就行了。两个人就要开会同步工作,协调分配,所以工作效率绝对不可能达到2倍。

并行与并发

  • 并行(parallel):指两个或多个事件在用一时刻发生(同时发生)。指在同一时刻,有多条指令多个CPU同时执行。比如:多个人同时做不同的事。

    多线程-程序、进程、线程与并行、并发的概念_第3张图片

  • 并发(concurrency):指两个或多个事件在同一个时间段内发生。即在一段时间内,有多条指令单个CPU快速轮换、交替执行,使得在宏观上具有多个进程同时执行的效果。

    多线程-程序、进程、线程与并行、并发的概念_第4张图片

    在操作系统中,启动了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单核CPU系统中,每一时刻只能有一个程序执行,即微观上这些程序是分时的交替运行,只不过给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。

    而在多核CPU系统中,则这些可以并发执行的程序便可以分配到多个CPU上,实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核CPU,便是多核处理器,核越多,并行处理的程序越多,能大大的提高电脑运行的效率。

你可能感兴趣的:(java学习,java)