I/O问题的学习(node学习第二篇)

本文深入探讨了Node环境下I/O操作的优化方法,包括串行与并行I/O的区别、如何通过代码拆分提高可读性和维护性、在回调函数中封装以避免深层嵌套等问题。重点介绍了Node的异步编程特性及其在并发编程中的应用,通过实例展示了如何有效地组织代码以应对I/O密集型任务。

1.串行与并行I/O的区别 

     串行很简单,即先进行一个I/O 操作,完成以后,再做下一个,并行实现起来比较复杂,但也不难理解,即同时进行两个I/O 操作。重点是,在串行任务中通常完成顺序是确定的,而在并行任务中任何一个操作先完成返回都是有可能的。

     在node里,我们假设i/o无限延长,也就是说I/O任务花费的时间是不确定的。所以我们不需要等待他,只需明白在I/O完成时会触发回调函数,这让执行任务变得很简单,但是次序是无法预测的,按照顺序的请求可以嵌套方法,或者把引用回调放在一起。这样当第一个回调触发时,它会发起第二个I/O 请求,第二个回调则启动第三个,以此类推。

2. 代码被拆分成更加可控的小块(这样可以拆分开嵌套,让代码更好的维护和阅读)

var render = function(wsData) {
page = pageRender(req, session, userData, wsData);
};
var getWsInfo = function(userData) {
ws.get(req, render);
};
var getDbInfo = function(session) {
db.get(session.user, getWsInfo);
};
var getMemCached = function(req, res) {
memcached.getSession(req, getDbInfo);
};

3.在回调函数中封装(不但代码组织更有逻辑性,而且利用展开的方法避免了多层嵌套的困绕)

server.on('request', function(req, res) {
var render = function(wsData) {
page = pageRender(req, session, userData, wsData);
};
var getWsInfo = function(userData) {
ws.get(req, render);
};
var getDbInfo = function(session) {
db.get(session.user, getWsInfo);
};
var getMemCached = function(req, res) {
memcached.getSession(req, getDbInfo);
};
}

 

转载于:https://www.cnblogs.com/xxygogo/p/4942159.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值