Optimization 优化技术

Optimization 优化技术,optimization,system-design,Optimization,System Design,在上图中,我们有一个生产者和一个消费者。生产者大约需要1个单位的时间来生产某些东西,消费者大约需要9个单位的时间(4个单位用来读取和计算数据,5个单位用来将数据写回数据库)。从设计的角度来看,我可以选择什么来确保消费者不会开始落后?我能做些什么(比如缓存,确保数据库中有适当的索引)来改善这一点呢?我不知道您的系统到底是什么样的,但我脑海中立即闪现的最初建议是为消费者和生产者创建多个线程,并使用threadpool重用线程。您必须为使用者而不是生产者创建更多的线程,因为使用者速度慢,并且控制流是同


在上图中,我们有一个生产者和一个消费者。生产者大约需要1个单位的时间来生产某些东西,消费者大约需要9个单位的时间(4个单位用来读取和计算数据,5个单位用来将数据写回数据库)。从设计的角度来看,我可以选择什么来确保消费者不会开始落后?我能做些什么(比如缓存,确保数据库中有适当的索引)来改善这一点呢?

我不知道您的系统到底是什么样的,但我脑海中立即闪现的最初建议是为消费者和生产者创建多个线程,并使用threadpool重用线程。您必须为使用者而不是生产者创建更多的线程,因为使用者速度慢,并且控制流是同步的。您应该尝试执行调优,以确定使用者线程与生产者线程的数量比率,以便始终有一些使用者线程可用于立即使用生产者线程创建的事件

再说一遍,我不知道确切的要求是什么。例如,使用多个线程将影响事件流的执行顺序,从而导致不一致。因此,如果您不需要按照事件发生的确切顺序来处理和持久化事件,那么您当然可以通过并行化(使用threadpool)来提高性能


祝你好运

“同步API调用”是什么意思?这是否意味着生产商将等待消费者处理完它发送的任何内容。。。?这难道不能完全避免你的问题,同时让事情变得有点低效吗?@MattiVirkkunen是的,很抱歉我没有解释清楚。同步意味着生产者最终等待消费者完成。那么,我可以在我的设计中添加什么来确保不会发生这种情况呢。我可以为这个设计添加一些东西使它更好。@MattiVirkkunen是的,它效率低下。这就是为什么我在寻找优化和提高效率的方法。你能把“计算”转移到另一个JVM吗?“计算”部分是消费者从SQL消费者数据库读取数据的过程。在这种情况下,我不认为将其移动到另一个JVM会有帮助。让我们假设您可以自由添加任何新组件或对该系统进行任何更改。最终目标是确保消费者不会阻碍系统。你建议我做什么?消费者上的多个线程可以释放生产者,但每个线程仍然需要大约9个工作单元才能完成。我们还假设数据不一致不是问题。