@wwqgtxx C 函数因为是编译期间就确定好的,执行的过程中也就涉及到堆栈的申请 /销毁; JS 可以在运行的过程中动态的创建 /销毁函数,得益于 NODEJS 所有函数属于同一个对象,对吧?貌似理由不是很充分。。。 多谢
Juggernaut
2017-12-11 11:03:47 +08:00
@cctv1005s927 大概明白了非阻塞 API 的概念了,你说的 native api 其实就是 nodejs 提供的一些底层的 api,非阻塞其实就是调用不阻塞,执行是否阻塞(是否同步返回执行结果)要看具体功能了,这样理解对吧?
一个新问题,如果一个 http 请求触发一个非阻塞的耗时的 api 调用,在 http 请求超时之前都没能完成该原生 api 的执行,等到其执行完成后,回调函数被调用执行,但是 HTTP 请求已经超时,这中非阻塞还有意义吗?就是在阻塞的时间未知的情况下,要在规定的时间段内完成任务,这种矛盾如何解决~是我等菜鸟想的太多吗?
感谢
wwqgtxx
2017-12-11 11:27:33 +08:00
@Juggernaut 你可以把 js 中的每个函数都理解成 c++中的一个类的实例,每一个 function 都是运行时 new 出来的 至于你说的超时问题,所有异步 api 一般都会提供 timeout 设置,超时的时候会调用特殊的超时回调函数或者给普通回调函数传一个错误信息标识,另外异步操作也是可以被打断的呀,你在主线程设置一个定时器,超时了直接中断那个异步操作不就得了