【多线程编程的第一课】进程和线程的概念,区别,联系

文章目录

    • 0. 前言
    • 1. 进程
    • 2. 进程控制块(PCB)
    • 3. 线程
      • 3.1 线程概念
      • 3.2 为什么引入线程
    • 4. 进程和线程区别与联系

0. 前言

要想了解多线程,那就绕不开进程,所以我们在学习多线程之前先简单了解一下进程。

1. 进程

进程是操作系统的基础,是一次程序的执行。进程包括线程(分为单线程,多线程),是系统进行资源分配和调度的一个基本单位,每个进程都有自己独立的内存空间和执行上下文。

例如:当我们打开自己电脑的“任务管理器”,我们会发现一个运行的程序,而这些运行的程序都是独立的进程,是动态的。
注意:只有程序运行时才是一个进程,不运行时只是一个可执行文件,是静态的。
【多线程编程的第一课】进程和线程的概念,区别,联系_第1张图片

2. 进程控制块(PCB)

PCB是一个结构体(可以说是一个低配的类,一般通过C/C++实现),里面记录了进程的各种属性,可以通过一系列数据结构来管理操作系统中的进程,对进程创建、终止、挂起、恢复等操作。
PCB是操作系统中的重要概念,它的设计和实现可以影响操作系统的性能和稳定性。

3. 线程

3.1 线程概念

线程是进程运行中一个小的执行单元,被称为轻量级进程。一个进程中至少有一个线程,这些线程可以并发执行,共享进程的资源。

例如:一个微信在运行的时候,是一个进程,而其中会包括许多线程(发送表情线程、传输文件线程、视频通话线程等),这些线程可以同时运行,从而执行对应功能。

【多线程编程的第一课】进程和线程的概念,区别,联系_第2张图片

3.2 为什么引入线程

我们可以把最原始的进程比作一个工厂,里面只能有一个生产线,这个时候没有引入线程,但我们仍可以把生产线比作成线程方便理解。
工厂在开工时,程序也在运行。
可是,当有一天工厂需要扩大规模,由于没有引入线程的概念,每个工厂只能有一条生产线,所以我们需要建立多个新工厂(多进程),需要选地址,花费人力建筑,完成后还需要花费更多的人力去管理,不同工厂在不同位置,当运输材料时,也需要花费人力时间。
而当我们引入线程的概念,那么工厂就不会局限于只能有一条生产线,我们可以在工厂内建立很多生产线(假设工厂足够大),省下很多空间,并且可能以前有些员工工作量较小,提现不出他们的价值,还可以增大员工的工作量,充分发挥每一人的潜力,使工厂更强大。(有点黑心老板的感觉,哈哈哈)

【多线程编程的第一课】进程和线程的概念,区别,联系_第3张图片
当然,多进程并不一无是处,我们前面是假设工厂足够大,当工厂不够大的时,还是需要多建立新的工厂,提高产量,并且员工分离,也减少了矛盾,拥有更多空间,如果发生火灾等危害,损耗也不会太大,所以多进程,多线程都会存在。
通过上面,也知道线程了的优点,下面在用书面语总结一下。

  1. 提高程序性能。多线程可以将计算密集型任务和I/O密集型任务分离,让系统的CPU资源得到更好的利用,可以加快程序的执行速度。
  2. 提高程序的响应速度。多线程可以将任务划分为多个较小的子任务并
    行执行,从而减少任务的响应时间,提高系统的交互性和即时性。
  3. 改进程序的结构。多线程可以让程序的不同部分并行执行,使得程序结构更加清晰、简单,便于维护和调试。
  4. 充分利用多核处理器的优势。随着计算机硬件的发展,多核处理器已经成为主流,多线程可以让程序在多个CPU核心上并发执行,充分利用多核处理器的特点,提高系统的性能。

4. 进程和线程区别与联系

进程和线程是操作系统中的两个核心概念,它们具有以下的区别和联系:

  1. 进程是资源分配的最小单位,而线程是CPU调度的最小单位。

  2. 进程具有独立的地址空间,而线程共享所属进程的地址空间。

  3. 进程之间相互独立,互不干扰,但线程之间共享进程的资源,因此线程之间会互相影响。

  4. 进程可作为独立的程序单元存在,而线程必须依赖于进程而存在。

  5. 进程拥有自己的一套堆栈空间和全局变量,而线程没有自己的堆栈,共享进程的堆栈空间和全局变量。

  6. 进程之间通信需要通过进程间通信机制来实现,而线程之间可以直接共享进程的内存,因此通信比较方便。

  7. 进程创建和销毁的开销比较大,因为需要为进程分配独立的资源和空间;而线程创建和销毁的开销较小,因为它们共享进程的资源和空间。

综上所述,进程和线程是相互依存、互相协作的概念,它们在系统运行中各有自己的作用和优势,应用需要根据需求和实际情况合理选择。

你可能感兴趣的:(Java多线程编程,java,jvm,多线程)