进程(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

相关文章
|
18天前
|
调度 开发者 Python
深入浅出操作系统:进程与线程的奥秘
在数字世界的底层,操作系统扮演着不可或缺的角色。它如同一位高效的管家,协调和控制着计算机硬件与软件资源。本文将拨开迷雾,深入探索操作系统中两个核心概念——进程与线程。我们将从它们的诞生谈起,逐步剖析它们的本质、区别以及如何影响我们日常使用的应用程序性能。通过简单的比喻,我们将理解这些看似抽象的概念,并学会如何在编程实践中高效利用进程与线程。准备好跟随我一起,揭开操作系统的神秘面纱,让我们的代码运行得更加流畅吧!
|
18天前
|
消息中间件 Unix Linux
【C语言】进程和线程详解
在现代操作系统中,进程和线程是实现并发执行的两种主要方式。理解它们的区别和各自的应用场景对于编写高效的并发程序至关重要。
46 6
|
18天前
|
调度 开发者
深入理解:进程与线程的本质差异
在操作系统和计算机编程领域,进程和线程是两个核心概念。它们在程序执行和资源管理中扮演着至关重要的角色。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
42 5
|
16天前
|
算法 调度 开发者
深入理解操作系统:进程与线程的管理
在数字世界的复杂编织中,操作系统如同一位精明的指挥家,协调着每一个音符的奏响。本篇文章将带领读者穿越操作系统的幕后,探索进程与线程管理的奥秘。从进程的诞生到线程的舞蹈,我们将一起见证这场微观世界的华丽变奏。通过深入浅出的解释和生动的比喻,本文旨在揭示操作系统如何高效地处理多任务,确保系统的稳定性和效率。让我们一起跟随代码的步伐,走进操作系统的内心世界。
|
18天前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
38 4
|
23天前
|
Java C# Python
线程等待(Thread Sleep)
线程等待是多线程编程中的一种同步机制,通过暂停当前线程的执行,让出CPU时间给其他线程。常用于需要程序暂停或等待其他线程完成操作的场景。不同语言中实现方式各异,如Java的`Thread.sleep(1000)`、C#的`Thread.Sleep(1000)`和Python的`time.sleep(1)`。使用时需注意避免死锁,并考虑其对程序响应性的影响。
|
1月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
28天前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
23 0
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
58 1
C++ 多线程之初识多线程
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
27 3