我使用Gatling模拟将http请求与简单的自定义操作相结合。我看到一个问题,即偶尔会有两个连续动作之间的延迟(60秒)应该立即执行:
.exec(s => {
System.out.printf(/* logging time here */);
s
})
.exec(/* my custom action */)
我在自定义操作中的Chainable.execute()
中记录时间戳。这大部分都有效,但有些执行因没有明显原因而延迟(并且自定义操作失败,因为它必须在前面的操作后不到一分钟内完成)。
由于我是演员的新手,有没有办法调试消息继续下一个动作挂起的位置?我认为后续操作应该立即在同一个线程中执行(因为没有任何东西可以阻止它),但这似乎不是真的。
系统在延迟期间不会卡住;在此期间执行其他操作,并且CPU未被充分利用。
答案 0 :(得分:1)
闻起来像阻止代码,检查你的线程。不,您无法保证将相同的线程用于连续操作。
如果你在Action实现中有一个阻塞调用,你实际上阻止了其中一个Akka线程,所以你最终会遇到线程饥饿,现在你的工作流程可以继续进行,直到一些线程再次可用。 / p>
不要阻挡在那里。如果您正在使用阻止API(无论如何都是错误的),请委托专用线程池。