“进程和线程的区别”是技术面试中被广泛问到的问题之一。 进程和线程都彼此相关并且非常相似,因此会造成混淆以理解它们的区别。 进程和线程是独立的执行序列,但两者的区别在于进程在不同的内存空间中执行,而同一进程的线程在共享内存空间中执行。
在本主题中,我们将了解进程和线程的简要介绍以及它们之间的其他区别。

什么是进程?

进程是正在执行的程序的一个实例。 当我们运行一个程序时,它不会直接执行。 遵循执行程序所需的所有步骤需要一些时间,遵循这些执行步骤称为过程。
一个进程可以同时创建其他进程来执行多个任务; 创建的进程称为克隆或子进程,主进程称为父进程。 每个进程都包含自己的内存空间,不与其他进程共享。 它被称为活动实体。 一个典型的进程在内存中保留为以下形式。

操作系统中的进程可以保持以下任何一种状态:

  • NEW:正在创建一个新进程。
  • READY:进程已准备好并等待分配给处理器。
  • RUNNING:程序正在执行。
  • WAITING:等待某个事件发生或发生。
  • TERMINATED:执行完成。

进程如何工作?
当我们开始执行程序时,处理器开始处理它。 它采取以下步骤:

  • 首先,程序经过翻译后以二进制代码的形式加载到计算机的内存中。
  • 程序需要内存和其他操作系统资源来运行它。 寄存器、程序计数器和堆栈等资源由操作系统提供。
  • 寄存器可以具有指令、存储地址或进程所需的其他数据。
  • 程序计数器保持程序序列的轨迹。
  • 堆栈包含有关计算机程序的活动子例程的信息。
  • 一个程序可能有它的不同实例,并且正在运行的程序的每个实例都称为单独的进程。

进程特点

  • 每次我们创建一个进程时,我们都需要为每个进程对操作系统进行单独的系统调用。 fork() 函数创建进程。
  • 每个进程都存在于自己的地址或内存空间中。
  • 每个进程都是独立的,并被操作系统视为一个孤立的进程。
  • 进程需要IPC(进程间通信)才能相互通信。
  • 不需要进程之间的适当同步。

什么是线程?

线程是进程的子集,也称为轻量级进程。 一个进程可以有多个线程,这些线程由调度程序独立管理。 一个进程中的所有线程都是相互关联的。 线程有一些共同的信息,例如:数据段、代码段、文件等,这些信息是共享给它们的对等线程的。 但包含自己的寄存器、堆栈和计数器。

线程如何工作?
正如我们所讨论的,线程是进程中的子进程或执行单元。 一个进程可以包含一个线程到多个线程。 线程的工作方式如下:

  • 当一个进程启动时,操作系统会为其分配内存和资源。 进程中的每个线程仅共享该进程的内存和资源。
  • 线程主要用于改进应用程序的处理。 实际上,一次只执行一个线程,但由于线程之间的快速上下文切换会产生线程并行运行的错觉。
  • 如果单个线程在一个进程中执行,则称为单线程;如果多个线程同时执行,则称为多线程。

线程类型
有两种类型的线程,它们是:

1.用户级线程
顾名思义,用户级线程只由用户管理,内核没有它的信息。
这些更快、更容易创建和管理。
内核将所有这些线程视为一个进程,并仅将它们作为一个进程处理。
用户级线程由用户级库实现,而不是由系统调用实现。
2.内核级线程
内核级线程由操作系统处理并由其内核管理。 这些线程比用户级线程慢,因为上下文信息由内核管理。 要创建和实现内核级线程,我们需要进行系统调用。

线程的特点
线程与进程内的对等线程共享数据、内存、资源、文件等。
一个系统调用能够创建多个线程。
每个线程都有自己的堆栈和寄存器。
线程可以直接相互通信,因为它们共享相同的地址空间。
线程需要同步以避免意外情况。

进程和线程之间的主要区别

一个进程是独立的,不包含在另一个进程中,而所有线程在逻辑上都包含在一个进程中。
进程的权重很大,而线程的权重很轻。
进程可以单独存在,因为它包含自己的内存和其他资源,而线程不能单独存在。
不需要进程之间的适当同步。 相反,线程需要同步以避免意外情况。
进程之间只能使用进程间通信进行通信; 相反,线程可以直接相互通信,因为它们共享相同的地址空间。

进程与线程的区别

进程 线程
进程是正在执行或处理的程序的一个实例。 线程是由调度程序独立管理的进程或轻量级进程的一部分。
进程彼此独立,因此不共享内存或其他资源。 线程相互依赖并共享内存。
每个进程都被操作系统视为一个新进程。 操作系统将所有用户级线程视为一个进程。
如果一个进程被操作系统阻塞,那么另一个进程可以继续执行。 如果任何用户级线程被阻塞,它的所有对等线程也会被阻塞,因为操作系统将它们都视为一个进程。
两个进程之间的上下文切换需要很长时间,因为它们与线程相比很重。 线程之间的上下文切换很快,因为它们非常轻量级。
每个进程的数据段和代码段相互独立。 线程与其对等线程共享数据段和代码段;因此其他线程也一样。
操作系统需要更多时间来终止进程。 线程可以在很短的时间内终止。
新进程的创建需要更多时间,因为每个新进程都会占用所有资源。 线程需要更少的时间来创建。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:进程和线程的区别
本文链接:https://www.vsdiffer.com/vs/process-vs-thread.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。