Java多线程基础-3:进程与线程间的区别的联系

22 篇文章 1 订阅

目录

一、进程与线程

1、进程

2、线程

二、进程与线程之间的区别和联系

1、区别

2、联系


一、进程与线程

1、进程

  • 进程是一个正在内存中运行的应用程序。
  • 在Windows系统中,一个正在运行的xx.exe文件就是一个进程。(注意:没有正在运行的.exe不是进程。)它是操作系统中一个非常基础的概念,对于理解计算机系统的运行机制非常重要。
  • 每个进程都有自己独立的内存空间,包含了程序代码、数据和堆栈等。
  • 每个进程中包含一个或多个线程,至少也会有一个线程。
  • 在操作系统中,进程是一个重要的概念。它允许多个程序同时运行,实现了多任务处理的能力。
  • 可以把进程看作是操作系统对一个正在运行的程序的抽象。进程的核心属性包括:PID,文件描述符表,内存指针,优先级,上下文,状态等,这些属性标识了系统对进程的资源分配:每个进程拥有自己独立的资源,如内存、文件、设备、CPU时间片等,同时也有自己的状态,如运行、就绪、阻塞等。每创建一个新的进程,就要向操作系统申请新的一整套的资源。操作系统通过管理进程来实现对计算机资源的调度和分配。因此,进程是资源分配的最小单位。
  • 进程可以通过创建子进程、进程间通信等方式实现复杂的任务,例如并发处理、网络通信等。
  • 进程可以由操作系统启动或由其他进程创建,它们可以在同一台计算机上运行,也可以在不同的计算机上运行。
  • 操作系统负责对进程进行调度,根据进程的状态和优先级分配给它们相应的时间片,使得它们可以轮流运行,从而实现多任务处理。
任务管理器中查看当前进程

2、线程

  • 线程是进程中的一个执行任务(控制单元),它是计算机程序执行时的最小单位,或者说,线程是CPU调度的最小单位。
  • 一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
  • 每个线程都有自己的执行序列和状态。多个线程可以在同一时间内并发执行,从而提高程序的效率和响应速度。
  • 线程共享进程的内存空间,因此可以访问相同的变量和数据结构。
  • 但是,由于多个线程可以同时访问共享资源,如果没有采取适当的同步措施,就会出现数据竞争和其他并发问题。
  • 线程可以在同一进程内协同工作,共同完成任务。例如,一个线程可以负责读取数据,另一个线程可以负责对数据进行处理,第三个线程可以负责将处理结果写入文件。
  • 多线程的方式可以充分利用计算机的硬件资源,提高效率。但是,线程的创建、切换和销毁等操作都需要消耗一定的系统资源,因此过多的线程反而会导致系统性能下降。因此,在编写多线程程序时需要注意平衡线程数量和系统资源的利用率。

关于“线程共享内存空间,因此可以访问相同的变量”这一结论,可以用以下方式来验证:

在main线程中创建的局部变量a,在 t 线程中也能访问到。

这里涉及到变量捕获的问题。变量捕获本质上是复制变量,可能从本线程复制而来,也可能从其它线程复制而来。但如果是从其它线程复制过来,那前提一定是能访问到另一个线程的内存(既然复制,前提一定是你能够拿到那个线程里面的变量)。

二、进程与线程之间的区别和联系

1、区别

进程和线程都是计算机操作系统中的概念,它们都代表着正在执行的代码。

它们之间的主要区别是:

  1. 进程是操作系统资源分配的最小单位,而线程是CPU调度的最小单位(或者说是进程中执行的最小单位)。

  2. 每个进程都有自己的地址空间、代码、数据和打开的文件等资源,进程之间相对独立,每个进程都有自己的独立空间和状态。而同一线程中的多个线程彼此共享该进程的资源。

  3. 进程切换的开销比线程大,因为每进行一次进程的切换,就同时需要切换地址空间和上下文环境。可以理解为,由于进程之间相对独立,每创建一个进程,就需要重新申请一块相应的资源。而线程切换只需要保存和恢复一部分上下文。

  4. 进程之间可以通过进程间通信来交换信息,而线程之间可以通过共享内存、消息队列等方式交换信息。

  5. 在实际编程中,线程可以更高效地利用多核处理器,提高系统的并发能力和响应速度,而进程更适合用于实现不同的功能模块以及隔离不同的应用程序的情境下。

2、联系

进程和线程之间也有联系,它们的关系如下:

  1. 一个进程可以包含多个线程。这些线程共享进程的地址空间和资源,因此它们可以相互通信和协作。

  2. 在多线程编程中,一个进程可以同时执行多个线程,这些线程可以并发地执行不同的任务,提高系统的并发能力和响应速度。

  3. 线程之间可以通过共享内存等方式共享数据和信息,从而实现协作和同步。

  4. 进程之间也可以通过进程间通信的方式共享数据和信息,从而实现协作和同步。

  5. 进程和线程的设计和实现都需要考虑资源的分配和管理、同步和互斥等问题,因此它们之间也有类似的编程模型和技术。

通过 jconsole 工具,可以直观地观察到“进程包含线程”这一结论:

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值