进程(process) vs 线程(Thread)

简介: 本文主要介绍了进程和线程的基本概念、区别以及操作系统如何调度线程的方式。同时,还介绍了线程锁的核心原理和实现方式。在多线程编程中,理解进程和线程的概念以及线程锁的使用,对于保证程序的安全性和性能非常重要。

前言

🚀 多方面理解进程(process)线程(Thread)

一、进程(process) vs 线程(Thread)

引用自维基百科

进程(英语:process),是指计算机中已执行的程序,曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,行程本身不是基本执行单位,而是线程的容器。

程序本身只是指令、数据及其组织形式的描述,相当于一个名词,行程才是程序(那些指令和数据)的真正执行实例,可以想像说是现在进行式。若干行程有可能与同一个程序相关系,且每个行程皆可以同步(循序)或异步(平行)的方式独立执行。现代计算机系统可在同一段时间内以进程的形式将多个程序加载到存储器中,并借由时间共享(或称时分复用),以在一个处理器上表现出同时(平行性)执行的感觉。同样的,使用多线程技术的操作系统或计算机体系结构,同样程序的平行线程,可在多CPU主机或网络上真正同时执行(在不同的CPU上)。

引用自CSDN INCOE AI

进程是指正在运行的程序实例。一个进程在执行时,需要占用CPU、内存和其他计算机资源。每个进程都有自己的内存空间、地址空间和数据栈。不同的进程之间相互独立,它们之间不会互相干扰。操作系统负责管理进程,包括进程的创建、调度、运行、结束和资源分配等。在计算机系统中,多个进程可以并行执行,提高了计算机系统的利用率。

引用自 geeksforgeeks

引用自 geeksforgeeks

进程:进程基本上是从就绪状态调度的程序,并且被CPU安排执行。PCB(进程控制块)是进程的概念。进程可以创建其他进程,这些进程称为子进程。进程需要更长的时间来终止,并且是隔离的,这意味着它不与任何其他进程共享内存。进程可以有以下状态:新建、就绪、运行、等待、终止和挂起。

线程:线程是进程的一个部分,这意味着一个进程可以有多个线程,并且这些多个线程被包含在一个进程中。线程有三种状态:运行、就绪和阻塞。

与进程相比,线程终止所需的时间较短,但不像进程,线程不是隔离的。

在这里插入图片描述
Difference between Process and Thread:

S.NO Process Thread
1 Process means any program is in execution. Thread means a segment of a process.
2 The process takes more time to terminate. The thread takes less time to terminate.
3 It takes more time for creation. It takes less time for creation.
4 It also takes more time for context switching. It takes less time for context switching.
5 The process is less efficient in terms of communication. Thread is more efficient in terms of communication.
6 Multiprogramming holds the concepts of multi-process. We don’t need multi programs in action for multiple threads because a single process consists of multiple threads.
7 The process is isolated. Threads share memory.
8 The process is called the heavyweight process. A Thread is lightweight as each thread in a process shares code, data, and resources.
9 Process switching uses an interface in an operating system. Thread switching does not require calling an operating system and causes an interrupt to the kernel.
10 If one process is blocked then it will not affect the execution of other processes. If a user-level thread is blocked, then all other user-level threads are blocked.
11 The process has its own Process Control Block, Stack, and Address Space. Thread has Parents’ PCB, its own Thread Control Block, and Stack and common Address space.
12 Changes to the parent process do not affect child processes. Since all threads of the same process share address space and other resources so any changes to the main thread may affect the behavior of the other threads of the process.
13 A system call is involved in it. No system call is involved, it is created using APIs.
14 The process does not share data with each other. Threads share data with each other.

机器翻译:

序号 进程 线程
1 进程是正在执行的任何程序。 线程是进程的一个片段。
2 进程需要更长的时间来终止。 线程需要更少的时间来终止。
3 创建进程需要更多的时间。 创建线程需要更少的时间。
4 进程切换也需要更多的时间。 线程切换需要更少的时间。
5 进程在通信方面效率较低。 线程在通信方面更有效率。
6 多任务处理涉及到多进程的概念。 对于多线程,我们不需要多个程序,因为一个单独的进程就包含了多个线程。
7 进程是隔离的。 线程共享内存。
8 进程被称为重量级进程。 线程是轻量级的,因为进程中的每个线程都共享代码、数据和资源。
9 进程切换使用操作系统的接口。 线程切换不需要调用操作系统,会导致中断到内核。
10 如果一个进程被阻塞,它不会影响其他进程的执行。 如果一个用户级线程被阻塞,所有其他用户级线程都会被阻塞。
11 进程有自己的进程控制块、堆栈和地址空间。 线程有父进程的 PCB、自己的线程控制块、堆栈和共同的地址空间。
12 对父进程的更改不会影响子进程。 由于同一进程中的所有线程共享地址空间和其他资源,因此对主线程的任何更改可能会影响进程的其他线程的行为。
13 这涉及到系统调用。 线程创建使用 API,无需涉及系统调用。
14 进程不共享数据。 线程共享数据。

OS( Operating System )如何调度线程的

操作系统调度线程的方式有多种。下面介绍常见的三种调度方式:

  1. 抢占式调度

抢占式调度是指操作系统会在当前线程正在执行时,强制将其暂停并将CPU分配给其他优先级更高的线程。这种调度方式通常用于实时系统,要求线程能够及时响应外部事件或紧急任务,并且不能让某一个线程长时间占用CPU资源。

  1. 协作式调度

协作式调度是指线程会自主地放弃CPU资源,并通知操作系统让其他线程运行。这种调度方式通常用于非实时系统,如桌面应用程序或服务端应用程序,要求线程能够相互协作,优雅地共享CPU资源。

  1. 混合式调度

混合式调度是指操作系统会根据线程的优先级和执行时间等多种因素,综合考虑使用抢占式和协作式两种调度方式。这种调度方式通常用于复杂的应用程序场景,既要满足实时性要求,又要保证线程之间的协作和共享。

线程锁的核心原理是什么?

线程锁的核心原理是控制多个线程之间对共享资源的访问。线程锁通过实现一种互斥机制,来保证同一时刻只有一个线程可以访问共享资源,从而避免多个线程在同一时刻对共享资源进行读写操作导致的数据不一致性和竞争条件等问题。线程锁的实现主要有两种常用的方式:互斥锁和读写锁。互斥锁在同一时刻只允许一个线程访问共享资源,其他线程需要等待该线程释放锁之后才能继续访问;而读写锁则允许多个线程同时读取共享资源,但在写操作时需要独占整个资源。线程锁的使用能够提高程序的安全性和性能,特别是在多线程并发访问共享资源时更为重要。

总结

本文主要介绍了进程和线程的基本概念、区别以及操作系统如何调度线程的方式。同时,还介绍了线程锁的核心原理和实现方式。在多线程编程中,理解进程和线程的概念以及线程锁的使用,对于保证程序的安全性和性能非常重要。

参考 : https://zhuanlan.zhihu.com/p/258049386

相关文章
|
12天前
|
存储 消息中间件 资源调度
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
该文章总结了操作系统基础知识中的十个关键知识点,涵盖了进程与线程的概念及区别、进程间通信方式、线程同步机制、死锁现象及其预防方法、进程状态等内容,并通过具体实例帮助理解这些概念。
「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
|
11天前
|
资源调度 算法 调度
深入浅出操作系统之进程与线程管理
【9月更文挑战第29天】在数字世界的庞大舞台上,操作系统扮演着不可或缺的角色,它如同一位精通多门艺术的导演,精心指挥着每一个进程和线程的演出。本文将通过浅显的语言,带你走进操作系统的内心世界,探索进程和线程的管理奥秘,让你对这位幕后英雄有更深的了解。
|
15天前
|
Java
直接拿来用:进程&进程池&线程&线程池
直接拿来用:进程&进程池&线程&线程池
|
16天前
|
负载均衡 Java 调度
探索Python的并发编程:线程与进程的比较与应用
本文旨在深入探讨Python中的并发编程,重点比较线程与进程的异同、适用场景及实现方法。通过分析GIL对线程并发的影响,以及进程间通信的成本,我们将揭示何时选择线程或进程更为合理。同时,文章将提供实用的代码示例,帮助读者更好地理解并运用这些概念,以提升多任务处理的效率和性能。
|
10天前
|
数据采集 消息中间件 并行计算
进程、线程与协程:并发执行的三种重要概念与应用
进程、线程与协程:并发执行的三种重要概念与应用
27 0
|
10天前
|
数据采集 Linux 调度
Python之多线程与多进程
Python之多线程与多进程
19 0
|
15天前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
16 0
|
2月前
|
存储 监控 Java
Java多线程优化:提高线程池性能的技巧与实践
Java多线程优化:提高线程池性能的技巧与实践
70 1
|
12天前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
19天前
|
Java Spring
spring多线程实现+合理设置最大线程数和核心线程数
本文介绍了手动设置线程池时的最大线程数和核心线程数配置方法,建议根据CPU核数及程序类型(CPU密集型或IO密集型)来合理设定。对于IO密集型,核心线程数设为CPU核数的两倍;CPU密集型则设为CPU核数加一。此外,还讨论了`maxPoolSize`、`keepAliveTime`、`allowCoreThreadTimeout`和`queueCapacity`等参数的设置策略,以确保线程池高效稳定运行。
87 10
spring多线程实现+合理设置最大线程数和核心线程数

相关实验场景

更多