进程和线程有什么区别?

更新日期: 2022-02-08阅读: 1.6k标签: 进程

从用户的角度来看,进程是正在运行的程序实例,而线程是进程中真正执行任务的基本单位。也就是说一个运行的程序至少包含一个进程,一个进程至少包含一个线程,线程不能独立于进程而存在。


进程

进程(Process)是操作系统分配资源的基本单位,一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。从编程的角度来理解进程,可以把它看作是一个类或一个 PCB(Process Control Block)进程控制块的结构体,这个结构体中大致包含以下几个内容:

1.进程编号 PID:进程的身份标识。

2.进程的状态:

  • 新建状态
  • 就绪状态
  • 运行状态
  • 阻塞状态
  • 销毁状态

3.执行优先级

4.上下文:保存本次执行状态,以便下次继续执行,这个过程就是一个上下文。

5.内存地址


线程

线程(Thread)是操作系统能够进行运算调度的基本单位。它包含在进程中,是进程中的实际运行单位。在 Unix System V 及 SunOS 中线程也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

PS:用户线程可以理解为应用程序自己的线程,由程序员创建并控制的线程;而内核线程是内核支持并使用的线程。


线程优势

线程是轻量级的进程,一个进程中包含了多个线程,因此多个线程间可以共享进程资源,线程和进程的关系如下图所示:


其中,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。

  • 程序计数器是一块内存区域,用来记录线程当前要执行的指令地址。
  • 栈是用来记录每个线程自己的局部变量的。
  • 堆中存放的是当前程序创建的所有对象。
  • 方法区存放的是常量和静态变量等信息。


进程和线程的区别

进程和线程的区别主要体现在以下几点。

区别1:从属关系不同从属关系不同:

进程是正在运行程序的实例,进程中包含了线程,而线程中不能包含进程。

区别2:描述侧重点不同描述侧重点不同:

进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。

区别3:共享资源不同共享资源不同:

多个进程间不能共享资源,每个进程有自己的堆、栈、虚存空间(页表)、文件描述符等信息,而线程可以共享进程资源文件(堆和方法区)。

区别4:上下文切换速度不同上下文切换速度不同:

线程上下文切换速度很快(上下文切换指的是从一个线程切换到另一个线程),而进程的上下文切换的速度比较慢。

区别5:操纵者不同操纵者不同:

一般情况下进程的操纵者是操作系统,而线程的操纵者是编程人员。


总结

进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位。一个进程中至少包含一个线程,线程不能独立于进程而存在。进程不能共享资源,而线程可以。线程可以看作是轻量级的进程,它们的主要区别体现在:从属关系、描述侧重点、共享资源、上下文切换速度和操纵对象等不同。

作者:磊哥
来源 | Java面试真题解析(ID:aimianshi666)


链接: https://fly63.com/article/detial/11097

Node.js的进程与子进程:从文档到实践

process 模块是 nodejs 提供给开发者用来和当前进程交互的工具,它的提供了很多实用的 API。从文档出发,管中窥豹,进一步认识和学习 process 模块:

nodejs如何启动多进程?

Node.js 以单线程的模式运行,使用事件驱动来处理异步 IO 并发(底层是多线程的线程池)。然而,要是 Node 运行在一个多核 CPU 上,如何让 Node 充分利用多核的优势,并行地处理任务?

Node.js几种创建子进程方法

其中exec可用于在指定的shell当中执行命令。不同参数间使用空格隔开,可用于复杂的命令。传给回调的stdout和stderr参数会包含子进程的stdout和stderr的输出。

NodeJS 进程是如何退出的

有几种因素可以导致 NodeJS 进程退出。在这些因素中,有些是可预防的,比如代码抛出了一个异常;有些是不可预防的,比如内存耗尽。process 这个全局变量是一个 Event Emitter 实例,如果进程优雅退出,process 会派发一个 exit 事件

Pandora.js让进程间通信更容易

进程间通信 IPC-Hub,简洁的进程间对象代理,经过努力,我们提出了『简洁的进程间对象代理』,看下面的例子会清楚得多:

进程与线程,你了解多少?

进程与线程,在面试中经常会被问到,或者实际开发中经常遇到。那什么是进程?什么是线程?你对他们了解有多少?我们经常会说:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!