博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对事件循环的一点理解
阅读量:5789 次
发布时间:2019-06-18

本文共 1185 字,大约阅读时间需要 3 分钟。

最近工作需要学习了解webworker-threads以应对Javascript多线程处理CPU密集型的可能性;参考文档;

以下是自己的一次尝试并引发的对于Javascript事件循环机制的一点理解

var Worker = require('webworker-threads').Worker;         var worker = new Worker(function() {             console.log(33333)             postMessage('hello, I\'m send before message');             this.onmessage = function(event) {                 console.log(22222);                 postMessage('Hello, I\'m listening');                 console.log(event.data);             }         })         worker.onmessage = function(event) {             console.log(11111)             console.log(event.data);         }         console.log(4444);         worker.postMessage('hello');

输出结果为: 

4444 33333 22222 hello 11111 hello, I'm send before message 11111 Hello, I'm listening

那么思考一下这个结果是如何产生的?

首先,确定Javascript是单线程事件循环机制,整体执行顺序如下:

  1. 第一次主线程运行: 输出 4444; 向we bworker发送信息’hello’;
  2. 事件循环第一次: 主线程发送的hello触发子线程: 输出 333333 -> 发送 ‘hello, I\’m send before message’ -> 输出 22222 -> 发送 ‘Hello, I\’m listening’ -> 输出hello;
  3. 事件循环第二次: 输出11111 -> 输出: ‘hello, I\’m send before message’;
  4. 事件循环第三次: 输出11111; 输出: ‘Hello, I\’m listening’

总结: 当前发送的事件触发信号会在下一次事件循环时触发.

转载于:https://www.cnblogs.com/zhaowinter/p/7941336.html

你可能感兴趣的文章
cd及目录快速切换
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
C++ 代码风格准则:POD
查看>>
linux-友好显示文件大小
查看>>
【转】【WPF】WPF中MeasureOverride ArrangeOverride 的理解
查看>>
【转】二叉树的非递归遍历
查看>>
NYOJ283对称排序
查看>>
接连遇到大牛
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
自己写spring boot starter
查看>>
花钱删不完负面消息
查看>>
JBPM之JPdl小叙
查看>>
Membership三步曲之进阶篇 - 深入剖析Provider Model
查看>>
前端优化及相关要点总结
查看>>
struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
查看>>
25 个精美的手机网站模板
查看>>
C#反射实例应用--------获取程序集信息和通过类名创建类实例
查看>>
VC中实现文字竖排的简单方法
查看>>
会话标识未更新
查看>>