老生常谈问题之——进程和线程的关系和区别

发布时间:2024年01月04日

最初,我们在学习进程和线程的时候都是和操作系统的知识相关的,但是我们前端菜鸟除了面试的时候很少用到他们,所以我们还是从前端常见的场景来详细的学习进程和线程吧。

在前端提到关于进程和线程的概念主要有以下几个场景

(1)js 是单线程的编程语言

也就是说在任何事和,js 引擎只能执行一个任务(或者说一个线程),也就是不支持并发。

这也就意味着js 代码在执行的时候只有一个主线程。

什么语言支持并发呢? Java、C#、C++、Python,都是后端的语言,哈哈,不用学习了。

你不会不知道 js 引擎是啥吧?js 引擎就是可以执行js代码的软件或程序,比如我们常见的浏览器和node,浏览器里面都有一个核心的js引擎,比如 chrome 浏览器是 大名鼎鼎的 V8引擎。

(2)浏览器提供两个独立线程分别是 web worker 和 service worker

因为 js 是单线程的变成语言,在运行时不能并发,但是浏览器提供了两个可以实现并发操作的worker,那就是 web worker 和service worker 。

(1)web worker 使用独立的线程后台运行脚本,不会阻塞主线程。

web worker 使用postmessage 和onmessage 和主线程通信

(2)service worker 使用独立的线程,可以拦截网络请求,也不会阻塞主线程。

service worker 需要先注册 navigator.serviceWorker.register,然后再监听install 事件

注意到没有, 关于 javascript 相关的描述都是用的线程。

(3)js 单线程模型和异步编程?

js 是单线程模型是没有问题的,这意味着同一时间只能执行一个任务,但是使用异步编程模型,可以使 js 在等待某些操作完成的同时执行其他任务。

异步编程的方法

  1. 回调函数
  2. 事件循环
  3. promise
  4. async?await

(4) 浏览器是多进程的模型

对于浏览器来说,就变成进程了,浏览器是多进程的。这也会是一个面试题,浏览器的进程主要包括:

  1. 浏览器进程 【也就是主进程,负责浏览器界面功能】
  2. 网络进程【负责网络请求】
  3. 渲染进程【对每个标签页渲染 dom 解析等功能,也是我们常说的浏览器的内核】
  4. 插件进程【浏览器插件】
  5. GPU 进程【图形处理单元(graphics processing unit)独立的进程,负责页面合成和动画】
  6. 扩展进程
  7. 沙盒进程

反正主要的就是1-5个,一定要详细背诵。

其实很好记忆的,你就跟着【浏览器输入url 到页面有返回】的整个过程来记忆就行了,浏览器主要不就是用来浏览网页的么?

(1)查询资料,输入URL【浏览器进程】 =>

(2)发起网络请求【网络进程】=>

(3)页面返回【渲染进程】=>

(4)页面有广告,我用浏览器拦截广告插件拦截一下【插件进程】=>

(5)页面很好看,有花里胡哨的动画【GPU进程】

貌似前端关于进程和线程相关的描述场景就这几个,当然可能有我没有想到的,欢迎补充。?

线程(Thread)和进程(Process)是操作系统中用于实现并发执行的两个基本概念,它们之间有密切的关系。

  1. 定义:

    • 进程: 进程是程序的执行实例,是操作系统进行资源分配和调度的基本单位。一个进程可以包含多个线程。
    • 线程: 线程是进程中的一个执行单元,是操作系统进行调度的最小单位。一个进程中的多个线程共享相同的进程资源,包括代码段、数据段和打开的文件等。
  2. 关系:

    • 一个进程可以包含多个线程: 在多线程的环境下,一个进程可以同时运行多个线程,这些线程共享相同的资源,可以更高效地完成任务。
    • 线程共享进程的资源: 线程之间共享相同的进程上下文,包括进程的地址空间、文件描述符和其他资源。
    • 线程更轻量级: 相比于进程,线程更为轻量级,因为它们共享大部分的资源,不需要像进程那样维护独立的地址空间。
  3. 通信与同步:

    • 进程通信: 不同进程之间通信较为复杂,通常需要使用进程间通信(IPC)机制,如消息队列、管道等。
    • 线程通信: 由于线程共享同一进程的地址空间,它们可以通过共享的内存空间直接进行通信。但这也需要一些同步机制来确保数据的一致性,避免竞态条件等问题。
  4. 独立性:

    • 进程独立性: 不同进程拥有独立的地址空间,一个进程的崩溃通常不会影响其他进程。
    • 线程共享: 线程共享相同的地址空间,一个线程的错误可能会影响到同一进程中的其他线程。

总的来说,线程是在进程内部执行的一组指令,它们共享进程的资源,能够更有效地完成并发任务。在多核系统中,多线程的使用可以更好地利用系统资源,提高程序的执行效率。然而,由于线程共享资源,需要谨慎处理同步和互斥,以避免产生竞态条件等问题

其他的题目,比如进程和线程的关系和区别,都是通用的知识了。?

  1. ?线程是不能单独存在的,他是由进程来启动和管理的。
  2. 一个进程就是一个程序的运行实例
  3. 线程是依附于进程的,进程中使用多线程并行处理能提升效率
  4. 进程中任意一个线程执行出错,都会导致整个进程奔溃
  5. 线程之间共享资源
  6. 进程之间相互独立
  7. 一个进程关闭后,操作系统会回收进程占用的内存

文章来源:https://blog.csdn.net/qq_17335549/article/details/135378482
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。