node.js回调函数的一点理解

刚开始入坑node.js,花了一下午才搞清楚什么是回调函数。回调函数是作为参数传递给另一个函数的,比如说function human(man,callback),这里的callback就是回调函数,看了很多篇文章有一句话给我留下了很深的印象就是一般函数的形参是由外往内向函数体传递变量的入口,但是加入了callback后,就是指在完成函数体的操作后向外传递参数的入口。也就是说,callback函数在当前函数完成之后才会被调用的,那么有人可能会问了,这不就阻塞了吗?一个函数在另一个函数之后调用不就是阻塞了吗,这个问题我也思考过,我的解释是这样的。由于js是异步的,也就是说每执行一个函数的时候不会将里面的代码执行完再执行下一个函数,而是会接着马上执行下一个函数,如果碰见了带有回调函数的函数的时候就会将回调函数入队列,这样将所有回调函数入队列后,等所有代码体执行完成后再将回调函数一个个取出来执行,这样就是异步非阻塞了。我还有一个理解就是,非阻塞是相对于io的,是非阻塞io也就是说当程序遇见需要执行io文件的时候就将io文件的执行交出去,将回调函数入队列,然后等io操作执行完成之后再将结果返回回调函数出队列,这也就是非阻塞io。至于但单线程,看到比较好的解释是,食堂只开放一个窗口,只有一个服务生,来点餐的人只需要告诉服务生他需要什么,然后服务生告诉厨师要做什么,然后马上下一位客人点餐,这样循环,客人不需要等上一位客人拿到他的事物后再点餐,效率提高了,就是服务生太惨了,需要一直不休息地服务,可能会过劳死,所以单线程不适用于大规模的集成计算。

猜你喜欢

转载自blog.csdn.net/lixiaohaohao/article/details/81608177