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

2024-01-04 12:20

本文主要是介绍老生常谈问题之——进程和线程的关系和区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

(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. 一个进程关闭后,操作系统会回收进程占用的内存

这篇关于老生常谈问题之——进程和线程的关系和区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569320

相关文章

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源