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

简介: 进程是操作系统中运行的应用程序,具有独立内存空间,包含代码、数据和堆栈,是资源分配的最小单位,而线程是CPU调度的最小单位,是进程内的执行任务,多个线程可共享进程资源。

一、进程与线程


1、进程


  • 进程是一个正在内存中运行的应用程序。


  • 在Windows系统中,一个正在运行的xx.exe文件就是一个进程。(注意:没有正在运行的.exe不是进程。)它是操作系统中一个非常基础的概念,对于理解计算机系统的运行机制非常重要。


  • 每个进程都有自己独立的内存空间,包含了程序代码、数据和堆栈等。


  • 每个进程中包含一个或多个线程,至少也会有一个线程。


  • 在操作系统中,进程是一个重要的概念。它允许多个程序同时运行,实现了多任务处理的能力。


  • 可以把进程看作是操作系统对一个正在运行的程序的抽象。进程的核心属性包括:PID,文件描述符表,内存指针,优先级,上下文,状态等,这些属性标识了系统对进程的资源分配:每个进程拥有自己独立的资源,如内存、文件、设备、CPU时间片等,同时也有自己的状态,如运行、就绪、阻塞等。每创建一个新的进程,就要向操作系统申请新的一整套的资源。操作系统通过管理进程来实现对计算机资源的调度和分配。因此,进程是资源分配的最小单位。


  • 进程可以通过创建子进程、进程间通信等方式实现复杂的任务,例如并发处理、网络通信等。


  • 进程可以由操作系统启动或由其他进程创建,它们可以在同一台计算机上运行,也可以在不同的计算机上运行。


  • 操作系统负责对进程进行调度,根据进程的状态和优先级分配给它们相应的时间片,使得它们可以轮流运行,从而实现多任务处理。


任务管理器中查看当前进程


2、线程


  • 线程是进程中的一个执行任务(控制单元),它是计算机程序执行时的最小单位,或者说,线程是CPU调度的最小单位。


  • 一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。


  • 每个线程都有自己的执行序列和状态。多个线程可以在同一时间内并发执行,从而提高程序的效率和响应速度。


  • 线程共享进程的内存空间,因此可以访问相同的变量和数据结构。


  • 但是,由于多个线程可以同时访问共享资源,如果没有采取适当的同步措施,就会出现数据竞争和其他并发问题。


  • 线程可以在同一进程内协同工作,共同完成任务。例如,一个线程可以负责读取数据,另一个线程可以负责对数据进行处理,第三个线程可以负责将处理结果写入文件。


  • 多线程的方式可以充分利用计算机的硬件资源,提高效率。但是,线程的创建、切换和销毁等操作都需要消耗一定的系统资源,因此过多的线程反而会导致系统性能下降。因此,在编写多线程程序时需要注意平衡线程数量和系统资源的利用率。


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




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


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


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


1、区别


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


它们之间的主要区别是:


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


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


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


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


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


2、联系


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


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


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


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


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


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


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






相关文章
|
8月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
362 0
|
5月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
863 2
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
284 1
|
5月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
304 1
|
8月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
9月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
345 0
|
12月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
Linux Shell
Linux 进程前台后台切换与作业控制
进程前台/后台切换及作业控制简介: 在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。 常用作业控制命令: - `fg %1`:将后台作业切换到前台。 - `Ctrl + Z`:暂停前台作业并放到后台。 - `bg %1`:让暂停的后台作业继续执行。 - `kill %1`:终止后台作业。 优先级调整:
1167 5
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
642 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)

热门文章

最新文章