java阻塞循环_黄金法则 — 不要阻塞事件循环 - Java API 版本的 Vert.x Core 手册

我们已经知道 Vert.x Api 是非阻塞,并且不会堵塞事件循环。

如果你堵塞事件循环,那事件循环将不能做别的事,因为它被阻塞了。如果所有的event loop被阻塞了,应用程序将完全停止!

所以不要这样做!你已经被警告。

阻塞的例子包括:

Thread.sleep()

等待锁

等待互斥体或监视器 (例如同步段)

做一个长时间的数据库操作和等待返回

做复杂的计算,需要很长的时间。

死循环。

如果有上述情况停止了事件循环(event loop),需要相当长的时间,你应经立即去下一步,并等待进一步的指示。

这个时间具体多长?

具体多长时间?它取决于应用程序需要的并发量。

如果你有一个单一的事件循环,并且你想要处理每秒 10000 的 http 请求,然后很明显,每个请求不能超过 0.1 ms 要处理,所以你不能阻塞比这更多的时间。

这道数学题并不是困难,作为练习留给读者。

如果您的应用程序不响应,可能你阻塞的事件循环的地方。为了帮助您诊断此类问题,如果它检测到一段时间后事件循环还没有恢复,Vert.x会自动记录警告。如果你在日志中看到这样的警告,那么你就应该去检查应用。

Thread vertx-eventloop-thread-3 has been blocked for 20458 ms

Vert.x 还将提供堆栈跟踪来确定阻塞发生的位置。

如果你想关闭这些警告或更改设置,你可以在创建Vertx对象之前,使用VertxOptions配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值