对事件循环的一点理解

最近工作需要学习了解webworker-threads以应对Javascript多线程处理CPU密集型的可能性;参考文档JavaScript多线程之二 Node.js中的Web Worker;

以下是自己的一次尝试并引发的对于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值