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

相关文章
|
3天前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
8天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
5天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
14 1
|
10天前
深入理解操作系统:进程与线程的管理
【10月更文挑战第30天】操作系统是计算机系统的核心,它负责管理计算机硬件资源,为应用程序提供基础服务。本文将深入探讨操作系统中进程和线程的概念、区别以及它们在资源管理中的作用。通过本文的学习,读者将能够更好地理解操作系统的工作原理,并掌握进程和线程的管理技巧。
23 2
|
12天前
|
调度 Python
深入浅出操作系统:进程与线程的奥秘
【10月更文挑战第28天】在数字世界的幕后,操作系统悄无声息地扮演着关键角色。本文将拨开迷雾,深入探讨操作系统中的两个基本概念——进程和线程。我们将通过生动的比喻和直观的解释,揭示它们之间的差异与联系,并展示如何在实际应用中灵活运用这些知识。准备好了吗?让我们开始这段揭秘之旅!
|
20天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
15 3
|
20天前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
29 2
|
20天前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
27 2
|
20天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
27 1
|
22天前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。

相关实验场景

更多