Node为什么适用于高实时的场景
发布于 11 年前 作者 ilolita 6459 次浏览 最后一次编辑是 8 年前

Node为什么适用于高实时的场景

15 回复

是啊,为什么呢>:-)

很多语言都适合,不适合的是人的观念,还有知难而退

可是,不是说node的诞生就是很适合高实时的场景么

顺序运行就 回调 啊 回调

不写就异步 啊 异步

套用官方的解释:

单线程异步非阻塞I/O

单线程,避免了服务占用过多内存,避免了线程上下文切换开销

异步非阻塞,通过JS的事件特性让工作彻底并发,解决了I/O延迟

是单进程多线程吧?

高实时不一定,但高并发是真的。

高实时意味这任务时间很短,nodejs异步回调可以尽可能减少硬件性能消耗,而且因为单线程可以加快反应速度,试想像tomcat-java对每个http request都会启动一个进程,中间的耗时和资源消耗会差很多,特别是在大访问量的情况下,性能差距就很明显,这也是为什么Nginx性能要比apache好的原因。

单线程,如果有用户下文件,尼玛后面的请求不都卡住了么:(

准确地说是高并发,简单逻辑的场景

@kingapple 不会卡住,node 就是这么工作的

@kingapple 是单进程,用户下文件是io负责的,io都是异步的,但是也会存在这种问题,如果node任务队列最大只允许10个任务,10个用户都在下文件,而且都未完成,那就有10个异步回调的任务在队列里等待传输完成,那就阻塞了,不会接受其他任务了,一般处理就是加大任务队列的限制,或者cluster,多开node进程。

10个进程,每个都在下大文件,后面的用户是不是都被阻塞了:(

@kingapple 不是阻塞,直接就抛异常,不处理请求了,10个io进程在node的任务队列了放了10个任务,都在下大文件,无法放入其他任务了。可以加大任务队列的最大限制数量,或者弄node cluster来解决,io太慢在tomcat或iis里会造成大量request堆积造成当机,node可以自我保护。

回到顶部