首页 > 其他 > 详细

对事件循环的一点理解

时间:2017-12-01 12:39:10      阅读:273      评论:0      收藏:0      [点我收藏+]

最近工作需要学习了解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’

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

对事件循环的一点理解

原文:http://www.cnblogs.com/zhaowinter/p/7941336.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!