博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript与多线程
阅读量:6566 次
发布时间:2019-06-24

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

hot3.png

副标题:Javascript异步通信的实现原理与multi-node

(学习心得,不敢独享,欢迎指正)

两个问题:

1、Node编程中所有通信都是异步执行的,如果某个事件的响应函数需要操作全局变量,则多个回调同时运行时怎么实现同步?
2、群里里面的兄弟“老狗”发现了一个项目:multi-node,即使用可以用其编写多线程的网络服务。 但是node本来就是异步的,为什么还需要多线程?

解答:

首先说一下JS的执行原理:js引擎执行js代码的时候是单线程的,即同一时刻只会有一个进程执行JS代码,回调函数也是一个一个执行的(按照事件发生的顺序,而不是代码的顺序)。JS中的异步通信和定时是由另外的线程实现的,脱离js线程上下文。以JS定时操作举例,当JS引擎执行 setTimeout(callbackFunction, 100)操作时,它会通知定时线程我需要100毫秒的定时,之后JS引擎进入事件循环。100毫秒之后,定时引擎向事件队列中加入一个时间已到的事件。 JS引擎从队列中读取时间已到的事件,执行callbackFunction。 如果同一时间有多个事件加入事件队列,JS引擎也只会一个一个的执行callback。对于异步也是同样,JS代码发起通信请求,通信线程执行通信操作,并在操作完成后将完成事件加入事件队列。JS引擎从队列中取出事件并调用回调处理通信结果。JS引擎在执行回调函数的时候,不能同时响应其他事件。

JS引擎示意图

如上所述,第一个问题迎刃而解,单线程自然就不必考虑同步问题了。对于Node应用而言,它是部分多线程,即非阻塞IO为多线程,但是IO结果的处理还是单线程执行。所以在IO结果处理比较复杂占用很多时间的时候,还是有必要启动多个node线程来响应请求的。不过话又说回来,像node这种编程模型的优点就是可以使用简单的代码写出高性能的应用,如果使用多个node线程,则处理它们之间的数据交换和同步就会大大增加应用编写的复杂程度,是否得不偿失就需要认真斟酌了。

相关资料:

浏览器中JS执行原理的说明:http://www.phpv.net/html/1700.html
浏览器伪多线程库:http://www.infoq.com/cn/articles/js_multithread

转载于:https://my.oschina.net/willSoft/blog/88197

你可能感兴趣的文章
ionic之点击放大图片
查看>>
前端计划——面试题总结-CSS篇
查看>>
慕课网_《微信授权登录》学习总结
查看>>
[elixir! #0043] 精确到 1bit 的字符串处理
查看>>
简单快速的开发WEB应用, PHP 框架 Lemon 介绍
查看>>
Web自动化之Headless Chrome概览
查看>>
【133天】尚学堂高淇Java300集视频精华笔记(71-72)
查看>>
剖析 Laravel 计划任务--事件属性
查看>>
我的2016总结
查看>>
对《Clojure in Action》第二版的书评与作者问答
查看>>
百度成立国内首个深度学习教育联盟,将制定行业标准
查看>>
Micronaut教程:如何使用基于JVM的框架构建微服务
查看>>
检查IP是否可用的方法
查看>>
BFC的一些探究
查看>>
pt,px,rem和em之间区别总结
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
作为数据科学家,我都有哪些弱点
查看>>
(转)线程安全的CopyOnWriteArrayList介绍
查看>>
中交兴路完成7亿元A轮融资,携手蚂蚁金服共建小微物流科技服务生态
查看>>