我有一个 Web 应用程序,它接收用户请求并将它们放入 MYSQL 数据库中。现在,典型的用户请求需要按照需要花费大量时间才能完成的工作流来处理。为了解决这个问题,我有一个异步处理器,它一直在监听 MYSQL 表。
我注意到,在无限循环中轮询 MYSQL 表会导致我的应用程序部署到的机器上的 CPU 使用率激增,这通常会导致机器无法使用。
我知道当 MYSQL 数据库中没有任何 Activity 请求时让异步进程 hibernate “一段时间”是一种选择,但我想将其作为最后的手段。
使这个过程同步不是一种选择,因为服务单个请求所涉及的工作流需要时间,而且还因为需要将处理与前端分离以允许后端发展。
我想知道是否有任何聪明的方法来触发异步进程,这样我就可以避免 CPU 使用率峰值,同时仍然从异步处理器获得最佳响应时间。
如有任何建议,我们将不胜感激。
谢谢 p1ng
最佳答案
一个选项是将请求存储在数据库中并在您的系统中发送某种事件(例如 JMS 消息,或通过使用 java.util.concurrent 构造)。然后读取和执行命令的进程可以被这个信号唤醒,去数据库中取数据并照常处理。
这样,您就不会浪费 CPU 周期来轮询尚不可用的数据,并且由于没有轮询延迟,您会更加 react 灵敏。
关于java - 在 Java 中触发异步进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606597/