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

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. 一个进程关闭后,操作系统会回收进程占用的内存
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • haiku定义简单的模型并初始化参数

    Haiku 是一个基于 JAX 的深度学习库 旨在提供简洁 灵活且易于使用的 API 以构建和训练神经网络模型 import haiku as hk import jax import jax numpy as jnp 1 定义简单的二层神
  • 学Python到底能干点什么?我为什么不建议去学Python

    学习了Python到底都能做些什么 好学编程今天带大家来看一看 Python 作为编程语言因其简单易学而受到很多开发者及初学者的青睐 那么 学了Python学了以后到底有什么用 它的应用领域有哪些呢 Python 的应用领域非常广泛 目前几
  • 基于SpringBoot的流浪动物救助网站

    文章目录 项目介绍 主要功能截图 部分代码展示 设计总结 项目获取方式 作者主页 超级无敌暴龙战士塔塔开 简介 Java领域优质创作者 简历模板 学习资料 面试题库 关注我 都给你 文末获取源码联系 项目介绍 基于SpringBoot的流浪

随机推荐

  • sha256比特币原版c++代码

    sha256是一个计算hash 的过程 比特币的算法核心就是计算sha256 sha256 h Copyright c 2014 2022 The Bitcoin Core developers Distributed under the
  • 客户数量众多,CRM管理系统如何帮助高效客户管理

    随着中型企业客户关系的不断扩大和发展 高效管理日益庞大的客户群体变得至关重要 CRM管理系统就是管理大量客户 维护客户关系的重要工具 然而 市面上CRM系统太多了 想要快速 准确找到一款适合您业务的CRM系统是一项艰巨的任务 多客户中型企业
  • CRM管理系统能提供哪些应用价值?CRM的功能

    牢固的客户关系是推动持续收入增长和盈利能力的关键 CRM管理系统则是完成这一目标的钥匙 预计到2024年 CRM在国内SaaS平台中的占比达到50 CRM解决方案存储了所有与客户相关的信息 并通过自动化工作流 全渠道沟通 销售流程管理等功能
  • 前端vue-puzzle-vcode验证码使用

    1 安装vue puzzle vcode npm i S vue puzzle vcode 2 实现代码
  • flannel和calico区别

    k8s网络模式 Flannel数据包在主机间转发是由backend实现的 目前已经支持UDP VxLAN host gw等多种模式 VxLAN 使用内核中的VxLAN模块进行封装报文 也是flannel推荐的方式 host gw虽然VXLA
  • wireshark抓包工具的使用

    专注于分享软件测试干货内容 欢迎点赞 收藏 留言 如有错误敬请指正 交流讨论 欢迎加入我们一起学习 资源分享 耗时200 小时精选的 软件测试 资料包 软件测试学习教程推荐 火遍全网的 软件测试 教程 前言 wireshark是非常流行的网
  • win8如何录制屏幕?实用教程分享

    录制屏幕已成为人们日常学习和工作中经常需要面对的问题 随着windows 8系统的普及 越来越多用户需要了解如何在这个平台上录制屏幕 可是win8如何录制屏幕呢 接下来 本文将介绍三种在win8系统上录制屏幕的方法 我们将对每种方法的操作步
  • zzz888

    8
  • 实实在在万事达!实在智能助力山东万事达集团加速数智化转型

    近日 杭州实在智能科技有限公司 以下简称 实在智能 与山东建筑钢市场 领头羊 山东万事达控股有限公司 以下简称 万事达集团 召开 RPA 机器人流程自动化 项目启动会 实在智能携手万事达集团 联合共建财务RPA一体化研发管理项目 以下简称
  • Java中的IO与NIO篇----第二篇

    系列文章目录 文章目录 系列文章目录 前言 一 阻塞 IO 模型 二 非阻塞 IO 模型 三 多路复用 IO 模型 前言 前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 这篇文章男女通用 看
  • iPhone强制恢复出厂设置,记好这2种方法!

    随着智能手机的广泛普及 如今有越来越多的人开始使用iPhone手机 但是 在使用的过程中 我们可能会遇到各种问题 比如程序崩溃 软件故障 系统运行缓慢等等 此时 恢复出厂设置成为了一种解决问题的有效方法 本文将为大家提供两种iphone强制
  • 人工智能未来发展前景怎么样?

    人工智能的未来发展前景怎么样 人工智能的未来发展前景非常广阔 有以下几个方面的发展趋势和前景 1 人工智能的未来发展前景 应用领域扩展 人工智能将在各个领域得到广泛应用 包括医疗保健 金融 交通 制造业 农业等 人工智能技术将帮助提高效率
  • 各位大佬看看这是不是macos的一个bug啊

    请各位大佬看看是不是一个bug啊 打开mac自带的命令行 先输入man less 显示没问题 再输入man more 发现出现的是less的说明 这里出了问题 第一张图是man less 第二张图是man more 我的系统环境如下
  • 易点易动固定资产管理系统:集成飞书,助力企业全生命周期固定资产管理

    易点易动固定资产管理系统 集成飞书 助力企业全生命周期固定资产管理 在现代商业环境中 固定资产管理对企业的运营和发展至关重要 为了提高管理效率和降低成本 我们引入了易点易动固定资产管理系统 该系统集成了飞书 为企业提供全生命周期的固定资产管
  • 美军杀伤网概念研究及对我防空作战装备体系的启示

    源自 现代防御技术 作者 王玉茜 曹亚杰 佘晓琼 廖咏一 人工智能技术与咨询 发布 摘 要 DARPA寻求从杀伤链转向杀伤网 意图利用信息网络构建高度分散的杀伤网 形成难以预测的杀伤链 美空军在试验旗体系下开展 橙旗 翠旗 和 黑旗 试验
  • Jenkins集成部署java项目

    文章目录 Jenkins简介 安装 Jenkins简介 Jenkins能实时监控集成中存在的错误 提供详细的日志文件和提醒功能 还能用图表的形式形象的展示项目构建的趋势和稳定性 官网 安装 在官网下载windows版本的Jenkins 但是
  • 技术人的年终总结分享

    印象深刻的实战经历 系统学习新技术的心得体会 精心整理的技术文档 想要安利给所有人的开发工具 对技术行业的深度思考 职业规划与心灵成长 新年Flag 在项目中取得的辉煌成绩 在应用开发中遇到的问题与解决方案 职场经历与升职感悟 编程语言的新
  • 电锯切割狂

    欢迎来到程序小院 电锯切割狂 玩法 把木块切成等分的碎片 每关都会有切割次数 木块数 切割越均匀分数越搞 有简单 正常 困难 专家版 快去解锁不同版本进行切割吧 开始游戏 https www ormcc com play gameStart
  • String.join()方法

    String join 是 Java 8 中添加的一个静态方法 它可以将一个字符串数组或者一个迭代器中的元素连接成一个字符串 它的语法如下 public static String join CharSequence delimiter C
  • 老生常谈问题之——进程和线程的关系和区别

    最初 我们在学习进程和线程的时候都是和操作系统的知识相关的 但是我们前端菜鸟除了面试的时候很少用到他们 所以我们还是从前端常见的场景来详细的学习进程和线程吧 在前端提到关于进程和线程的概念主要有以下几个场景 1 js 是单线程的编程语言 也