进程和线程的本质区别

news2024/10/7 2:29:18

前几天有个同学问我,为什么electron是多进程而不是多线程?今天总结一下,对这个问题做下解答。

首先我们先了解下进程的概念:进程是计算机分配资源的最小单位

简单地说,进程是一个容器。比如一间漂亮的小别墅,别墅里有卧室、厨房、书房、洗手间等,当然还有一家三口住在里面。当妈妈带女儿外出游玩时,爸爸一个人在家。这时爸爸一个人在家里爱去哪里就去哪里、爱干什么就干什么,这时爸爸就像一个线程(这个进程中只有一个活动线程),小别墅就像一个进程,家里的厨房、书房就像这个进程占有的资源。当三个人住在一起时(相当于三个线程),有时候可能就会有些小冲突,比如,当女儿占着电视机看动画片时,爸爸就不能看体育频道了,这就是线程间的资源竞争。当然,大部分时候,线程之间是协作关系(如果我们创建线程是用来打架的,那么创建它干什么呢?)。比如,妈妈在厨房为爸爸和女儿做饭,爸爸在书房工作赚钱以养家糊口,女儿在写作业,各司其职,那么这个家就其乐融融。相应地,这个进程也就在健康地执行。

在电脑上如何看进程呢?

线程:是程序执行的最小单位
打开任务管理器
在这里插入图片描述
程序是死的,进程是“活”的,或者说是正在被执行的

如何创建一个进程

nodejs创建子进程主要有4个函数:

spawnexecexecFilefork

感兴趣看我这篇文章:https://blog.csdn.net/woyebuzhidao321/article/details/129567942

在电脑上如何看线程呢?

进程中可以容纳若干线程。它们并不是看不见、摸不着的,如下图示。

在这里插入图片描述
可以看到一个进程里面是包含了若干个线程的。

用稍微专业点的术语说,线程就是轻量级进程,是程序执行的最小单位。使用多线程而不是多进程去进行并发程序的设计,是因为线程的切换和调度的成本远远小于进程。

如何创建一个线程

在 Node.js 中,可以通过 Worker 对象来创建自己的线程对象。Worker 是 Node.js 的内置模块,它提供了一种简单的方式来创建独立的 JavaScript 线程。下面是一个简单的示例:

const { Worker } = require('worker_threads');

// 创建新的线程
const worker = new Worker('./worker.js', { workerData: { message: 'hello' } });

// 监听线程消息
worker.on('message', (message) => {
  console.log(`Received message from worker: ${message}`);
});

// 监听线程错误
worker.on('error', (error) => {
  console.error(`Error in worker: ${error}`);
});

// 监听线程退出事件
worker.on('exit', (code) => {
  console.log(`Worker exited with code ${code}`);
});

上述示例中,通过 Worker 对象创建了一个新的线程,使用 workerData 选项向线程传递了一个消息。线程文件 worker.js 可以通过workerData属性来获取传递的消息,并在需要时向主线程发送消息。在主线程中,可以监听线程的消息、错误和退出事件,并根据需要做出相应的处理。在线程文件 worker.js 中,可以通过 parentPort 对象来与主线程通信。例如:

const { parentPort, workerData } = require('worker_threads');

console.log(`Received message in worker: ${workerData.message}`);

// 向主线程发送消息
parentPort.postMessage('world');

上述代码中,使用 workerData 属性获取传递的消息,并在控制台输出。然后使用 postMessage 方法向主线程发送消息。需要注意的是,Node.js 的 Worker 对象使用的是基于线程的实现,而不是基于进程的实现。因此,创建的线程是运行在同一个进程中的,不同线程之间共享同一份内存。在多线程编程中,需要注意线程安全和共享资源的问题,以避免潜在的并发问题。

为什么electron是多进程而不是多线程

采用多进程而不是多线程的主要原因是安全性和稳定性。在多线程的情况下,一个线程的崩溃可能会导致整个应用程序崩溃而在多进程的情况下,一个进程的崩溃只会影响到该进程,不会影响到其他进程,从而提高了应用程序的稳定性。
此外,Electron采用多进程还可以实现更好的资源管理和分配。每个进程都有自己的内存空间和 CPU 时间,可以更好地利用系统资源,提高应用程序的性能。
最后,多进程还可以实现更好的安全性。每个进程都有自己的沙箱环境,可以防止恶意代码对整个应用程序的攻击和破坏。
因此,虽然多线程在某些情况下可能更加高效,但在安全性和稳定性方面,多进程是更好的选择。

如果文章中哪里写的有问题欢迎兄弟萌指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

文章目录 系列文章1.项目搭建1.1 新建Asp.net core webapi项目1.2 配置连接Mysql1.3 实现对mysql数据库的数据增删改查,接口1.3.1 根据id查询数据1.3.2 根据用户名模糊查询数据,并分页1.3.3 新增用户数据1.3.4 修改用户数据1.3.5 根据ID删除数据1.3.6 接…

针对工业网络攻击的五个关键控制措施

人们普遍持有一种过时的误解,认为成功的网络攻击只会造成信息和数据损坏或窃取信息和数据。 但随着互联性的增强和物联网的兴起,存在一种不同类型的网络威胁,其动机更加险恶,对关键民用基础设施造成物理损害,并可能造…

VTS表格数据查看与转换

说明 vts是由formula one生成的文件后缀名,它兼容中文,具备类似EXCEL的功能:如格式编排、制作表格线、移动和复制单元格、单元格的计算、画简单框图等等。 查看与转换 直接执行脚本,自动注册ttf16.OCX,打开TTF1.ex…

Java版本企业电子招投标采购系统源码——功能模块功能描述

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供…

第十一章:C语言数据结构与算法初阶之排序

系列文章目录 文章目录 系列文章目录前言排序的概念及其运用排序的概念常见的排序算法 常见排序算法的实现1.直接插入排序2. 希尔排序(缩小增量排序)3. 直接选择排序4. 堆排序5. 冒泡排序6. 快速排序将区间按照基准值划分为左右两半部分的常见方式&#…

为Kubernetes(k8s)集群安装仪表盘(Dashboard)

为Kubernetes集群安装仪表盘 文档说明部署仪表盘(Dashboard UI)访问 Dashboard 用户界面 文档说明 对应本片文章的视频教程地址:https://www.bilibili.com/video/BV1MF41197RS/?vd_source98deeeab6739fa30792cfcffa994b50e 在之前的文章当中我们搭建了一个kubern…

Spring接收前端传递数据的方式

搭建项目 然后点击下一步完成即可搭建成功 在pom文件中导入lombok的jar包,帮助我们快速创建实体类 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version> </dependency&…

腾讯云服务器CPU处理器大全_性能测评

腾讯云服务器CPU采用什么处理器型号&#xff1f;主频睿频多少&#xff1f;腾讯云服务器CPU性能如何&#xff1f;云服务器CVM规格不同CPU型号也不同&#xff0c;轻量应用服务器的CPU处理器性能如何&#xff1f;腾讯云服务器网分享腾讯云服务器CPU处理器大全&#xff1a; 目录 …

Win10+Anaconda+RTX3070+Pytorch-GPU深度学习环境搭建

一、CUDA安装 1. 查询CUDA driver版本&#xff1a; 2. 下载并安装&#xff1a; CUDA Toolkit Archive | NVIDIA DeveloperPrevious releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please sele…

MFC第十五天 HWND与CWnd对象之间的转换、CWnd类简介(补充)、员工管理系统登录界面眼睛捕获(补充)

文章目录 HWND与CWnd对象之间的转换CWnd类简介&#xff08;补充&#xff09;cwnd系统函数Coordinate Mapping Functions 坐标系转换窗口树 Window tree access计时器管理Window Access Functions 窗口访问功能Window Text Functions 窗口文本函数Window State FunctionsCMenu F…

matlab将0 1矩阵显示为黑白图像

解决方法 clear clc pattern cell2mat(struct2cell(load("pattern"))); pic1 squeeze(pattern(1:64,:,:,:)); pic1 logical(permute(pic1, [2,3,1])); temp pic1(:,:,1); imshow(pic1(:,:,1));显示效果 test int8(rand(30,30)); imshow(logical(test));本来想…

CANoe运行时改变系统变量的值的几种方式

在CANoe运行时,想要随时改变系统变量的值为任意值,怎么办?(这里的值指的是数值) 我们在CANoe工程上创建一个系统变量: 改变系统变量的值,我们第一时间想到的是在CAPL中用代码实现: on key a {@sysvar::ControlPanel::EngineSpeed = 10; }通过一个按键’a’的事件程序…

前端选择时间范围关联日期快速查询

效果图 html部分 <div class"select-list"><ul><li><label>时间&#xff1a;</label><select id"timeInterval"><option value"1">自定义</option><option value"2">当天<…

手机切换ip地址会遇的问题以及解决方法汇总

手机切换IP地址是一种常见的操作&#xff0c;它可以帮助用户解决一些网络问题&#xff0c;提高网络连接速度&#xff0c;或者绕过某些限制。然而&#xff0c;在进行IP地址切换时&#xff0c;用户可能会遇到一些问题。本文将详细介绍手机切换IP地址可能遇到的问题&#xff0c;并…

一、rocketmq整体架构及nameServer源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术&#xff0c;自主研发的云正式商用的专业消息中间件&#xff0c;既可为分布式应用系统提供异步解耦和削峰填谷的能力&#xff0c;同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…

前端Vue仿美团地址管理列表组件

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

将Xvfb和Chrome封装到Docker镜像中并执行java程序

docker pull ubuntu:22.04docker run -itd --net host -v /home/:/home ubuntu:22.04 进入容器 docker exec -it 8203e24ed bash apt-get update apt-get install xvfb apt-get install chromium-browser apt install chromium-chromedriver apt install openjdk-11-jdk …

webpack打包

webpack打包 1、webpack再次打包2、webpack的入口和出口 1、webpack再次打包 背景&#xff1a;代码增加之后&#xff0c;如何打包呢&#xff1f; 1、确保在src/index.js引用和使用 2、重新执行yarn build打包命令 2、webpack的入口和出口 1、新建webpack.config.js配置文件 …

五、Spring 注解开发

文章目录 一、使用注解开发的环境准备二、Spring 框架核心注解学习2.1 Component2.1.1 通过注解来控制 Bean 的作用域&#xff08;Scope&#xff09; 2.2 Component 的派生注解&#xff08;对应这 web 开发的三层架构分层&#xff09;2.2.1 Repositor2.2.2 Service2.2.3 Contro…

6.2.6 网络基本服务----电子邮件系统(E-mail)

6.2.6 网络基本服务----电子邮件系统&#xff08;E-mail&#xff09; 电子邮件系统是因特网上使用的最多且最受用户欢迎的一种应用 电子邮件系统包括用户代理和邮件服务器&#xff0c;提供收发邮件、邮件传送服务&#xff0c;邮件被传送到收信人邮件服务器的收信人信箱中&…