gpt4 book ai didi

java - 使用队列解耦程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:23:41 24 4
gpt4 key购买 nike

在他的talk在 54:53 分钟处,Rich Hickey 谈到使用队列作为解耦依赖程序部分的方法。您能否举例说明如何解耦以下 Java 伪代码以改进其设计和/或灵 active :

// Warning: Java-pseudo-code ahead
class Job {
public void doRun(A a) {
saveObjectToDatabase(a);

B b = computeB(a);
saveObjectToDatabase(b);

C c = computeC(b);
logToFile(c);
}
}

saveObjectToDatabasesaveObjectToDatabase 可以看作是有副作用的方法,而 computeBcomputeC 的输出仅取决于 a

我知道这个问题相当模糊/广泛。我想了解如何在不使我的程序过于复杂的情况下利用排队机制,并仍然确保它以正确的顺序做正确的事情。任何指向正确方向的指示都将受到赞赏。

最佳答案

好吧,这不是一个很好的例子,但是(在最直接的设计中)您基本上有两个队列,并且(取决于涉及的数据量)您可以省略数据库。

第一个进程将从“外部世界”接收您的a 对象并将它们排入队列 1。第二个进程将从队列 1 中取出对象,执行 computeB ,并将结果排入队列 2。第三个进程将从队列 2 中取出对象,执行 computeC,并记录结果或其他任何内容。

正如我所说,根据所涉及的数据量(可能还有一些其他因素),队列中传递的“对象”可能是您实际的 ab 对象或只是 token / key 以在数据库中查找数据。

队列本身可以通过多种方式实现。可以用数据库实现一个队列,例如,尽管细节有点困惑。 “进程”可以是单个 Java 进程中的 Java 任务,也可以是独立的操作系统进程,甚至可能位于不同的机器上。

当您在 Unix 上使用“管道”时,您就是在以这种方式有效地使用队列。

关于java - 使用队列解耦程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8726838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com