Node为什么适用于高实时的场景
是啊,为什么呢>:-)
很多语言都适合,不适合的是人的观念,还有知难而退
可是,不是说node的诞生就是很适合高实时的场景么
顺序运行就 回调 啊 回调
不写就异步 啊 异步
套用官方的解释:
单线程异步非阻塞I/O
单线程,避免了服务占用过多内存,避免了线程上下文切换开销
异步非阻塞,通过JS的事件特性让工作彻底并发,解决了I/O延迟
是单进程多线程吧?
@kingapple 单进程单线程
高实时不一定,但高并发是真的。
高实时意味这任务时间很短,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可以自我保护。