多线程-概念篇

释放双眼,带上耳机,听听看~!

进程与线程

进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能。

进程概念

进程就是应用程序在内存中分配的空间,也就是正在运行的程序,各个进程之间互不干扰。同时进程保存着程序每一个时刻运行的状态。

  • 进程是程序的一次动态执行过程,需要从代码加载、代码执行、执行完毕的一个完整过程,这个过程由产生、发展、消亡的过程。
  • 由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。
  • 进程让操作系统的并发成为了可能

线程概念

  • 多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的程序单元称之为线程,这些线程可以同时存在,同时运行,一个进程可以包含多个同时执行的线程。
  • 多线程是执行并发机制的一种有效手段,进程和线程一样,都是实现并发的一个基本单位,线程是比线程更小的执行单位,线程是进程的基础之上进行的进一步划分。

程序

用某种编程语言(java、python等)编写,能够完成一定任务或者功能的代码集合,是指令和数据的有序集合,是一段静态代码

CPU采用时间片轮转的方式运行进程

  • CPU为每一个进程分配一段时间,称作为时间片,如果在时间片结束时,程序还在运行,则暂停这个进程的运行,并且CPU分配给另一个进程(这个过程叫上下文切换)。
  • 如果进程在时间片结束钱阻塞或结束,则CPU立即进行切换,不要等待时间片用完。
  • 当进程暂停时,特惠报错当前线程的状态(进程标识,进程使用的资源等)下一次切换回来时跟进之前报错的状态进行恢复,接着运行。

进程和线程的区别

进程是一个独立的运行环境,而线程是在进程中执行的一个任务

本质区别:是否独占有内存地址空间及其他系统资源

重要区别:进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间单位。

  • 进程单独占有一定的内存地址空间,所以进程间存在内存隔离,数据是分开的,数据共享复杂但是同步简单,各个进程之间互不干扰;而线程共享所属进程占有的内存地址空间和资源,数据共享简单,但是同步复杂。
  • 进程单独占有一定的内存地址空间,一个进程出现问题不会影响其他进程,不影响主程序的稳定性,可靠性高;一个线程崩溃可能影响整个程序的稳定性,可靠性较低。
  • 进程单独占有一定的内存地址空间,进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及页调度,开销较大;线程只需要保存寄存器和栈信息,开销较小。

上下文切换概念

上下文切换(有时候也称为进程切换或任务切换) 是指CPU从一个进程(或线程)切换到另一个进程(或线程)。

上下文是指某一个时间点CPU寄存器和程序计数器的内容。

  • 寄存器是cpu内部的少量的速度很快的闪存,通常存储和访问计算过程的中间值提高计算机程序的运行速度。
  • 程序计数器是一个专用的寄存器,用于表明指令序列中 CPU 正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体实现依赖于特定的系统。
  • 举例说明 线程A – B
  • 1.先挂起线程A,将其在cpu中的状态保存在内存中。
  • 2.在内存中检索下一个线程B的上下文并将其在 CPU 的寄存器中恢复,执行B线程。
  • 3.当B执行完,根据程序计数器中指向的位置恢复线程A。

CPU通过为每个线程分配CPU时间片来实现多线程机制。

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。

在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,

所以任务从保存到再加载的过程就是一次上下文切换。

上下文切换通常是计算密集型的,意味着此操作会消耗大量的 CPU 时间,故线程也不是越多越好

如何减少系统中上下文切换次数,是提升多线程性能的一个重点课题。(所以会出现各种操作系统win)

给TA买糖
共{{data.count}}人
人已赞赏
Java

EasyExcel注解

2021-9-6 10:07:01

技术文章资源分享

summernote

2021-9-6 10:52:59

2 条回复 A文章作者 M管理员
  1. 小威

    膜拜大佬

    • 超人不会飞

      快点怎么编辑,我把我在其他地方写的文章复制过来,没看格式

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索