JS中的进程和线程 世界热推荐
2023-04-21 12:23:01 来源:博客园
进程和线程都是计算机中的概念,用于描述程序执行时的运行单位。
进程是指正在运行的程序的实例,包括程序代码、数据、堆栈和资源等。 每个进程都拥有独立的地址空间,因此不同进程之间的数据无法直接访问,只能通过进程间通信的方式进行交互。
线程是进程中的一个执行单元,一个进程可以包含多个线程,每个线程共享进程的地址空间和资源,但是拥有自己的堆栈和执行状态。 不同线程之间可以直接访问同一进程的数据,因此线程间通信更加方便,但也需要注意线程同步和互斥问题。
【资料图】
在 JavaScript 中,进程和线程的概念并不是直接暴露给开发者的,而是通过浏览器或 Node.js 等执行环境来实现的。
在浏览器中,JavaScript 是单线程的,也就是说所有 JavaScript 代码都运行在同一个线程中,这个线程被称为“UI 线程”或“主线程”。 这个线程负责处理用户交互事件、更新 UI 界面、执行 js 代码等任务。如果 js 代码执行时间过长,会导致页面出现“假死”或“卡顿”现象,因此需要采用异步编程的方式来避免这种情况。
在 JavaScript 中,常用的异步编程方式有回调函数、 Promise 和 async/await 等。这些方式都可以让 js 代码异步执行,从而避免长时间阻塞 UI 线程。
在 Node.js 中,JavaScript 采用的是基于事件驱动和非阻塞 I/O 的模型,也就是说,它是基于单线程的,但是可以通过异步 I/O 和事件驱动来实现高并发。在 Node.js 中,可以通过 child_process 或 cluster 模块来创建子进程,实现多进程的方式来提高程序的并发性能。
下面是在 JavaScript 中使用异步编程方式避免阻塞 UI 线程的例子:
// 使用回调函数的方式异步加载图片function loadImageAsync(url, callback) { var img = new Image(); img.onload = function() { callback(null, img); }; img.onerror = function() { callback(new Error("Could not load image at " + url)); }; img.src = url;}// 调用异步函数加载图片并更新 UIloadImageAsync("https://image.com/image.png", function(err, img) { if (err) { console.error(err); } else { document.body.appendChild(img); }});
上面的代码通过回调函数的方式实现了异步加载图片,避免了长时间阻塞 UI 线程。
下面是在 Node.js 中用 child_process 模块创建子进程的例子:
const { spawn } = require("child_process");// 创建子进程并执行命令const child = spawn("ls", ["-lh", "/usr"]);// 监听子进程的输出child.stdout.on("data", (data) => { console.log( child stdout:\n${data} );});child.stderr.on("data", (data) => { console.error( child stderr:\n${data} );});// 监听子进程的关闭事件child.on("close", (code) => { console.log( child process exited with code ${code} );});
在上面的示例中,我们创建了一个子进程,并在其中执行 ls -lh /usr 命令。我们还监听子进程的输出和关闭事件。在执行期间,子进程的输出将被打印到控制台,并在子进程退出时输出子进程的退出代码。
注意,这里我们使用的是 Node.js 的 spawn 方法,它是异步的。还有一个 exec 方法可以执行同步的系统命令,但是在执行长时间运行的任务时可能会阻塞主进程的执行。
总的来说,JavaScript 中的进程和线程概念都是通过执行环境来实现的,而不是直接暴露给开发者的。开发者需要根据实际需求来选择合适的编程模型,以达到最优的性能和并发效果。同时,我们还需要注意异步编程的相关技术和并发控制的问题,以确保程序的正确性和性能。
相关阅读
- (2023-04-21)JS中的进程和线程 世界热推荐
- (2023-04-21)工业指数基金净值查询_工业指数
- (2023-04-21)(经济)我国连锁酒店客房总规模近553万间
- (2023-04-21)天天快看:市委市直机关工委举办 建设“六个春城”演讲比赛
- (2023-04-21)输了比赛的汗水,才是青春啊
- (2023-04-21)多氟多:4月20日融券净卖出36.6万股,连续3日累计净卖出43.17万股-天天亮点
热点推荐
- (2023-04-21)JS中的进程和线程 世界热推荐
- (2023-04-21)天天关注:爬坡轨道车_爬坡
- (2023-04-21)女教师与学生欢爱小说阅读_女教师与学生欢爱小说-世界快资讯
- (2023-04-21)最新快讯!【手慢无】雷神Zero2023 16吋游戏币上市12999元送键盘
- (2023-04-21)2023云南省林草科技创新论坛在昆明举行
- (2023-04-21)工业指数基金净值查询_工业指数
最近更新
- (2023-04-21)JS中的进程和线程 世界热推荐
- (2023-04-21)天天关注:爬坡轨道车_爬坡
- (2023-04-21)女教师与学生欢爱小说阅读_女教师与学生欢爱小说-世界快资讯
- (2023-04-21)最新快讯!【手慢无】雷神Zero2023 16吋游戏币上市12999元送键盘
- (2023-04-21)2023云南省林草科技创新论坛在昆明举行
- (2023-04-21)工业指数基金净值查询_工业指数
- (2023-04-21)全球播报:12月29日外汇市场行情走势分析:日本央行宣布计划外债券购买操作,美元/日元走低
- (2023-04-21)道明证券:英央行5月加息是肯定的,那6月呢?-全球即时看
- (2023-04-21)天天速递!美元/加元今日货币走势分析(2023年4月21日)
- (2023-04-21)(纽约期市)黄金上涨,因美国经济数据疲软|当前时讯
- (2023-04-21)全球热头条丨截至4月1日,俄罗斯黄金储备为7480万盎司
- (2023-04-21)离不开你陈小春歌词_离不开你歌曲简介_世界新要闻
- (2023-04-21)台退将称民进党买40年前导弹船都打不沉 网友:为给美交保护费 焦点简讯
- (2023-04-21)(经济)我国连锁酒店客房总规模近553万间
- (2023-04-21)英媒:萨利巴为出战曼城愿不惜一切代价,踢圣徒不太可能复出|世界微动态
- (2023-04-21)天天短讯!珀斯这个城市怎么样啊_珀斯位于哪个国家
- (2023-04-21)天天快看:市委市直机关工委举办 建设“六个春城”演讲比赛
- (2023-04-21)【天天聚看点】华为宣布成功实现MetaERP研发替换,耗时三年投入数千人
- (2023-04-21)隆基绿能:近期硅料价格下降,有利于刺激下游装机需求快速增加 全球头条
- (2023-04-21)海南离岛免税政策实施12周年 环球报资讯
- (2023-04-21)创新赋能光伏产业
- (2023-04-21)上海18项改革举措为创新主体放权松绑_天天亮点
- (2023-04-21)环球热头条丨工业经济企稳向好 接续举措凝聚稳增长合力
- (2023-04-21)保险业务向智能化转变 “80后”成“中流砥柱”
- (2023-04-21)我国中东部将有大范围降水过程 强冷空气将影响我国中东部地区
- (2023-04-21)华安证券给予中科江南买入评级,一季报业绩高增,行业电子化有望加速发展
- (2023-04-21)输了比赛的汗水,才是青春啊
- (2023-04-21)多氟多:4月20日融券净卖出36.6万股,连续3日累计净卖出43.17万股-天天亮点
- (2023-04-21)指数向上再假突破是啥后果?|全球播资讯
- (2023-04-21)天天视讯!4月20日利华益维远双酚A价格稳定