Enviar búsqueda
Cargar
Nodejs异步原理和缺陷 - 赵成
•
Descargar como PPTX, PDF
•
8 recomendaciones
•
1,316 vistas
Jackson Tian
Seguir
NodeParty-SH-1
Leer menos
Leer más
Tecnología
Empresariales
Denunciar
Compartir
Denunciar
Compartir
1 de 20
Descargar ahora
Recomendados
Nodejs异步的原理和缺陷
Nodejs异步的原理和缺陷
mysqlops
Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05
Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05
Hang Geng
About Thrift
About Thrift
jiaqing zheng
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techparty
Gump Law
不一樣的Web server... coServ
不一樣的Web server... coServ
Ben Lue
Node.js 淺談socket.io
Node.js 淺談socket.io
Simon Su
學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
Blend4web研究--代码结构
Blend4web研究--代码结构
gastrodia
Recomendados
Nodejs异步的原理和缺陷
Nodejs异步的原理和缺陷
mysqlops
Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05
Ceph中国社区9.19 Ceph IO 路径 和性能分析-王豪迈05
Hang Geng
About Thrift
About Thrift
jiaqing zheng
iOS开发常用库推荐之一@techparty
iOS开发常用库推荐之一@techparty
Gump Law
不一樣的Web server... coServ
不一樣的Web server... coServ
Ben Lue
Node.js 淺談socket.io
Node.js 淺談socket.io
Simon Su
學好 node.js 不可不知的事
學好 node.js 不可不知的事
Ben Lue
Blend4web研究--代码结构
Blend4web研究--代码结构
gastrodia
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
Node.js 進攻桌面開發
Node.js 進攻桌面開發
Fred Chien
Jni文档
Jni文档
woshiwzy
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
深入浅出NodeJS
深入浅出NodeJS
sunzhenghua
Nodejs部门分享
Nodejs部门分享
zffl
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
Node.js长连接开发实践
Node.js长连接开发实践
longhao
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
鍾誠 陳鍾誠
程式人雜誌 2015年五月
程式人雜誌 2015年五月
鍾誠 陳鍾誠
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
hugo
Inside VCL
Inside VCL
Sheng-Wei (Kuan-Ta) Chen
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
Node分享 展烨
Node分享 展烨
tb-vertical-guide
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
裕波 周
Node js feat pegasus
Node js feat pegasus
cnfi
D2-ETao-show
D2-ETao-show
leneli
Node js实践
Node js实践
myzykj
Javascript primer plus
Javascript primer plus
Dongxu Yao
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
Jackson Tian
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian
Más contenido relacionado
Similar a Nodejs异步原理和缺陷 - 赵成
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Jackson Tian
Node.js 進攻桌面開發
Node.js 進攻桌面開發
Fred Chien
Jni文档
Jni文档
woshiwzy
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
leneli
深入浅出NodeJS
深入浅出NodeJS
sunzhenghua
Nodejs部门分享
Nodejs部门分享
zffl
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
Node.js长连接开发实践
Node.js长连接开发实践
longhao
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
鍾誠 陳鍾誠
程式人雜誌 2015年五月
程式人雜誌 2015年五月
鍾誠 陳鍾誠
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
hugo
Inside VCL
Inside VCL
Sheng-Wei (Kuan-Ta) Chen
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
建興 王
Node分享 展烨
Node分享 展烨
tb-vertical-guide
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
裕波 周
Node js feat pegasus
Node js feat pegasus
cnfi
D2-ETao-show
D2-ETao-show
leneli
Node js实践
Node js实践
myzykj
Javascript primer plus
Javascript primer plus
Dongxu Yao
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Joseph Chiang
Similar a Nodejs异步原理和缺陷 - 赵成
(20)
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Node.js 進攻桌面開發
Node.js 進攻桌面開發
Jni文档
Jni文档
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
深入浅出NodeJS
深入浅出NodeJS
Nodejs部门分享
Nodejs部门分享
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
Node.js长连接开发实践
Node.js长连接开发实践
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
程式人雜誌 2015年五月
程式人雜誌 2015年五月
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
Inside VCL
Inside VCL
IKVM.NET 深入敵營的 Java
IKVM.NET 深入敵營的 Java
Node分享 展烨
Node分享 展烨
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
Node js feat pegasus
Node js feat pegasus
D2-ETao-show
D2-ETao-show
Node js实践
Node js实践
Javascript primer plus
Javascript primer plus
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
Más de Jackson Tian
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
Jackson Tian
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian
(C)NodeJS
(C)NodeJS
Jackson Tian
Mobile webapp&v5 html5_min
Mobile webapp&v5 html5_min
Jackson Tian
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
Jackson Tian
Mongoskin - Guilin
Mongoskin - Guilin
Jackson Tian
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_design
Jackson Tian
Why Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
Jackson Tian
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
Jackson Tian
Ruby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay Shanghai
Jackson Tian
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
Jackson Tian
Más de Jackson Tian
(11)
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
(C)NodeJS
(C)NodeJS
Mobile webapp&v5 html5_min
Mobile webapp&v5 html5_min
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
Mongoskin - Guilin
Mongoskin - Guilin
MobileWebAppFramework_V5_design
MobileWebAppFramework_V5_design
Why Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
Ruby vs Node ShiningRay Shanghai
Ruby vs Node ShiningRay Shanghai
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
Nodejs异步原理和缺陷 - 赵成
1.
node.js异步:原理和缺陷 赵成 @小型笨蛋
2.
node.js util http
https fs Javascript模块 …… buffer child_process file net C模块 …… V8解析器 事件库 uv libeio libev
3.
主要内容 异步接口的实现 uv,libev,以及libeio
存在的问题
4.
异步的实现方式 Synchronous I/O
Multiplexingselect,pselect,poll,epoll,kqueue,libev 线程模拟glibcaio,libeio Kernel Native AIO,以及Windows Overlapped I/O前者问题多多,比如仅支持 O_DIRECT 方式来对磁盘读写后者用于在uv中实现Windows的异步I/O 在Linux下,node.js靠libev和libeio配合使用来实现异步I/O
5.
事件驱动的一个例子 var net
= require('net'); var server = net.createServer(function (socket) { socket.write("Echo server"); socket.pipe(socket); }); server.listen(1337, "127.0.0.1"); static Handle<Value> Connect(constArguments&) { ... uv_tcp_connect(..., AfterConnect); ... }
6.
7.
*nix下uv是对libev的封装
8.
9.
10.
另一个例子:fs.close(fd) static Handle<Value>
Close(const Arguments& args) { intfd = args[0]->Int32Value(); if (args[1]->IsFunction()) { ASYNC_CALL(close, args[1], fd) } } #define ASYNC_CALL(func, callback, ...) br />eio_##func(After, cb_persist(callback));
11.
12.
主要提供文件I/O操作
13.
异步操作通过线程实现
14.
libeio仅依赖pthread,跨平台能力非常好
15.
16.
为什么不用libev实现异步文件操作? @爱多 对于Regular
File 来说,是不能够用采用 poll/epoll的,即O_NOBLOCK 方式对于传统文件句柄是无效的,也就是说我们的 open ,read, mkdir之类的Regular File操作必定会导致阻塞
17.
BAD CASE function
onFileB(err) { fs.readFile("c"); } function onFileA(err, data) { data += "blabla"; fs.writeFile ("b", data, onFileB); } fs.readFile ("a", onFileA);
18.
调用过程 主线程 poll
fs.readFile onFileA fs.readFile poll onFileB 新线程 read read
19.
代价 代码变得非常不直观 每个fs.readFile都发起一个线程
线程间context switch时代价很大 如果传递的是匿名函数,那么在执行前,函数的context会一直保存在内存中回调函数执行前资源(比如说数据库连接)不会被释放
20.
21.
conn.query();中有很多层嵌套时conn.close();将会推迟很久才执行
22.
23.
如果能够并行 varfilename =
“a”; async (function(){ vardata = fs.readFileSync (filename); data += "blabla"; fs.writeFileSync("b", data); fs.readFileSync("c"); }); console.log(“Main thread is in parallel”); 怎样实现async?
24.
25.
子进程的运行结果通过pipe传输node-fork
https://github.com/zcbenz/node-fork
26.
使用fork的问题 新进程相对昂贵 进程间传递javascript对象需要额外开销
不能传递函数 file destriptor会被复制,如果fork前程序已经在监听端口,子进程也将会监听同一个端口,产生竞争 V8引擎不允许多个线程同时使用V8的接口,所以不可能把多线程引入node
27.
Thank you 赵成
@小型笨蛋 zcbenz@gmail.com
Descargar ahora