Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
ChatGPT
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
GitHub工具
更多话题
非堵塞的几个Web框架性能测试
15-03-25
banq
有好事者将Tomcat7的Servlet-BIO与Servlet-NIO以及Node.js、Node.js-sync和Scala的Spray几个框架的性能测试,测试结果显示这几个框架的响应时间都差不多,这几个框架中有堵塞(Node.js-sync)和非堵塞(Node.js)两个方式,由此作者得出堵塞和非堵塞性能并没有多大区别。
测试结果见:
bozho-benchmarks/nonblocking at master · Glamdring
点评:作者可能没有意识到非堵塞的真正意义,真正非堵塞是杜绝可能会产生堵塞的瓶颈,比如Socket IO是一个堵塞点,Socket IO在我们Web服务器中一般会存在两个地方,接受前端请求响应的Http服务器端,上面几个框架是这种Socket IO,还有一种是访问后端数据库的Socket IO。这两个容易堵塞点单独运行时可能没有什么问题,但是如果两个同时发生堵塞,容易陷入类似多线程的死锁状态,也就是说,一个线程已经通过Http的IO,等待DB的IO,而DB的IO已经被其他线程池连接被用光了,或者正在使用中,那么这个线程会停止等待,堵塞住了,因为它还hold住Http的IO线程,那么就会导致Http的IO堵塞,新的请求不再进来。
非堵塞实际是将每个单独线程能够顺利完成全部流程,消除中间可能发生的堵塞点。
NIO非堵塞IO
异步编程
NodeJS系统
Java性能测试