首页 > 系统相关 >web worker进程和线程的区别,Chrome 中有哪些常⻅进程,如果我有⼀个耗时很⻓的同步计算任务,如何让 JS 代码达到多线程并发执⾏的效果

web worker进程和线程的区别,Chrome 中有哪些常⻅进程,如果我有⼀个耗时很⻓的同步计算任务,如何让 JS 代码达到多线程并发执⾏的效果

时间:2023-06-16 14:57:46浏览次数:36  
标签:web Worker worker JS 线程 进程 多线程

进程(Process)和线程(Thread)都是操作系统中用于多任务处理的概念。简单地说,一个进程就是一个程序的执行空间,而一个线程则是在执行空间内独立运行的执行路径。

区别:

  1. 进程是系统分配资源的最小单位,线程是操作系统调度的最小单位。
  2. 各个进程之间是独立的,各个线程之间共享一些资源。
  3. 创建或销毁进程时,会涉及到比较多的系统资源,开销比较大,而线程的创建和销毁的开销相对较小。
  4. 进程与进程之间会有 IPC(进程间通信)的开销,而线程之间的 IPC 开销较小。

在 Chrome 浏览器中,会有多个进程同时运行:

  1. Browser 进程:负责管理整个浏览器的生命周期、显示窗口、处理用户操作等。
  2. Renderer 进程:负责一个 Tab 内关联的页面的渲染和运行,每个 Tab 都有一个独立的 Renderer 进程。
  3. GPU 进程:负责处理页面中使用的 WebGL 等 GPU 相关任务。
  4. Plugin 进程:负责运行插件,包括 Flash 等。
  5. Utility 进程:负责处理部分浏览器内部的任务,比如下载、DNS 等。

如果想让 JS 代码达到多线程并发执行的效果,可以使用 Web Workers。Web Workers 是运行在后台的 JavaScript 线程,可以让页面在主线程中执行 JS 代码的同时,创建一个或多个新的线程在后台执行耗时的任务。Web Workers 的 API 包括:

  1. Worker 构造函数:用于创建一个新的 Worker 线程。
  2. postMessage() 方法:用于向 Worker 线程发送数据。
  3. onmessage 事件:用于监听 Worker 线程发送回来的消息。

举个例子,可以使用如下代码创建一个 Worker 线程:

// file: worker.js
self.addEventListener('message', function(e) {
  var data = e.data;
  self.postMessage(data);
}, false);

// file: main.js
var worker = new Worker('worker.js');
worker.addEventListener('message', function(e) {
  console.log('Worker said: ', e.data);
}, false);
worker.postMessage('Hello World');

在上面的例子中,我们在主线程中创建了一个 Worker 线程,向它发送了一条消息,并在 Worker 线程中处理这条消息,并将结果发回到主线程。这样就实现了多线程的并发执行效果。

标签:web,Worker,worker,JS,线程,进程,多线程
From: https://www.cnblogs.com/kitebear/p/17485500.html

相关文章

  • eWebEditor从word复制粘贴公式
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
    前言  前面做了一些交互,网页是直接通过html对response进行返回的,这里QtWebApp与传统的web服务器不同,传统的web服务器可以调用同级目录相对路径或者绝对路径下的js,而QtWebApp的httpserver是response返回当前页面的问题,默认是无法调用的。  为了解决调用一些依赖的如echarts......
  • Socket及WebSocket(九)
    一、Socket套接字(Socket)是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程......
  • websocket 使用
     https://www.runoob.com/html/html5-websocket.html   ......
  • Linux下嵌入式Web服务器BOA和CGI编程开发
    https://blog.csdn.net/Ikaros_521/article/details/102610768一、环境搭建操作系统:Ubuntu12.04LTS(CentOS7类似0.0)boa下载地址(网址突然又挂了):http://www.boa.org/官方文档:http://www.boa.org/documentation/boa-2.htmlGitHub仓库:https://github.com/gpg/boa我是其他网站找......
  • 如何降低Vue.js项目中Webpack打包文件的大小?
    结论结论:vue中,直接引用文件,可以让打包文件最小。试验记录下面测试项目中引入一个Button组件的代价。基准工程大小:[raywill:shop]npmrunbuild>shop@build/Users/raywill/code/vue/shop>cross-envNODE_ENV=productionwebpack--progress--hide-modulesHash:d902d9dc5e......
  • WebService
    WebService发布:1,建一个公用文件夹2,右键发布,选着文件系统。3,目标位置:文件系统,选择刚刚创建的文件夹4,IIS管理器:网站右键:添加网站5,填写网站名,物理路径为公用文件夹,指定IP地址,选择端口号6,发布未能加载文件或程序集“System.Web.Extensions,Version=3.5.0.0,Culture=neutral,Public......
  • WebStrom配置less
    全局安装less前提:电脑安装了Node.js,没有安装的参考其他文章npminstall-gless注意:在mac系统或者Linux中全局安装需要在命令前加sudo提高权限这样安装的less是最新版的,只作为学习less用法或者不配合其他的包或者框架使用。第三方的库或者框架使用的less版本一般都是很稳......
  • 多进程log4cxx区分日志
    多进程log4cxx区分日志(金庆的专栏)网游客户端一般会多开,多个进程会写同一个日志文件。log4cxx看来会对文件加锁,防止多进程写同一文件写乱,截止目前还没发现错乱的日志。log4cxx有个MDC(MappedDiagnosticContext)功能,可以区分不同进程的日志。在日志格式中插入帐号名,就可以区分不同......
  • Web基础与HTTP协议
    目录一、DNS与域名1.DNS2.域名3.域名小结二、HTML文档1.网页的概念2.HTML概述三、Web1.Web概述2.分布式3.Web1.04.Web2.05.静态页面与动态页面(1)静态页面(2)动态页面(3)小结四、HTTP协议1.HTTP协议简介2.HTTP1.13.HTTP2.04.HTTP请求格式(GET/POST方式)(1)GET方式(2)POST......