前言
🚀 多方面理解进程(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 )如何调度线程的
操作系统调度线程的方式有多种。下面介绍常见的三种调度方式:
- 抢占式调度
抢占式调度是指操作系统会在当前线程正在执行时,强制将其暂停并将CPU分配给其他优先级更高的线程。这种调度方式通常用于实时系统,要求线程能够及时响应外部事件或紧急任务,并且不能让某一个线程长时间占用CPU资源。
- 协作式调度
协作式调度是指线程会自主地放弃CPU资源,并通知操作系统让其他线程运行。这种调度方式通常用于非实时系统,如桌面应用程序或服务端应用程序,要求线程能够相互协作,优雅地共享CPU资源。
- 混合式调度
混合式调度是指操作系统会根据线程的优先级和执行时间等多种因素,综合考虑使用抢占式和协作式两种调度方式。这种调度方式通常用于复杂的应用程序场景,既要满足实时性要求,又要保证线程之间的协作和共享。
线程锁的核心原理是什么?
线程锁的核心原理是控制多个线程之间对共享资源的访问。线程锁通过实现一种互斥机制,来保证同一时刻只有一个线程可以访问共享资源,从而避免多个线程在同一时刻对共享资源进行读写操作导致的数据不一致性和竞争条件等问题。线程锁的实现主要有两种常用的方式:互斥锁和读写锁。互斥锁在同一时刻只允许一个线程访问共享资源,其他线程需要等待该线程释放锁之后才能继续访问;而读写锁则允许多个线程同时读取共享资源,但在写操作时需要独占整个资源。线程锁的使用能够提高程序的安全性和性能,特别是在多线程并发访问共享资源时更为重要。
总结
本文主要介绍了进程和线程的基本概念、区别以及操作系统如何调度线程的方式。同时,还介绍了线程锁的核心原理和实现方式。在多线程编程中,理解进程和线程的概念以及线程锁的使用,对于保证程序的安全性和性能非常重要。