关于node.js单线程机制
发布于 7 年前 作者 javaxu 3891 次浏览 最后一次编辑是 4 年前

我们知道node.js是单线程机制,程序会按照事件队列来顺序执行,我想当一个事件需要的资源被占用时,这个事件就会阻塞,那么这个事件之后的一些事件不就也无法执行了吗?node.js有相应的处理办法吗?

9 回复

如果这个事件之后的一些事件是依赖于这个事件的,那么会一直等待。 如果并非依赖于这个事件,那么会被执行。 这不是很正常吗,不知道楼主想要什么样的处理办法

如果资源被占用,那么事件确实会被阻塞啊,比如cpu100%工作,反应不过来了,那不管什么语言什么情况都会被阻塞啊

就是说阻塞事件后面的一些事件到底会不会继续执行的问题。

@javaxu 那还是要看具体事件是否用到了阻塞资源

@cony138就是说如果没有用到阻塞资源,事件还是会执行的是吧?

@cony138我可不可以把这个事件队列机制理解为各个事件执行的开始时间顺序的队列,就是说它也不是严格的一个事件执行完成以后再开始执行下一个事件。

@javaxu 事件有“监听”和完成后的“触发”两个阶段,监听的过程几乎没有开销,瞬间完成,按照你的代码顺序;“监听后”和“触发前”之间要去做一些相对应的任务,任务是需要开销的,时间有的长有的短,完成后才可以触发相对应的事件,所以到了触发阶段,触发的顺序并不一定是监听时候的顺序。 一个事件完成后再做另一个,这是阻塞式的吧。

搞不懂你们在说什么。 伪代码: Event_A(); Event_B(Callback_EventC); Event_D();

上面有A,B,C,D四个事件。事件B需要使用到阻塞资源,事件C也需要该资源,D不需要。 那么执行顺序是 A 先执行,其次B执行,并等待资源。 其次D执行(立即执行,不用等待B)。 B等拿到资源后,执行剩余步骤,然后C开始执行。

上面顺序不是很合理吗?不存在说有事件可以执行偏偏等待的情况。 楼主到底想要什么样的处理办法??

@wuliao49 @cony138 懂了,感谢两位!!!

回到顶部