我是否应该在我的 java 视频应用程序中实施 consumer/producer 模式,如果是,如何实施?

Should I implement the consumer/producer pattern in my java video app, and if yes, how?

我用桌面构建了一个小型视频帧分析应用程序 Java 8. 在每一帧上,我提取数据(现在是 5 倍,但将来可以扩展到 1920x1080x3 OpenCV Mat) .我想将这些数据存储到数据库中(例如 Java 数据库)以执行一些时间序列分析,并定期 return 将结果提供给用户。

如果我在单个线程上写入数据库和 运行 应用程序,我担心硬盘访问时间,我想到的最佳解决方案是实施 producer/consumer 多线程模式。我找到的例子都实现了 3 个线程:

  1. 主线程
  2. 生产者线程
  3. 消费者线程

与 2 线程实现相比,这样做有优势吗?

  1. 主线程和生产者线程
  2. 消费者线程

这是使用数据库处理实时数据的正确方法吗?

你的问题比较概念化,所以我认为它属于这里:Programmers

但作为我的经验的一个简短提示,您将生产者与主要部分分开,因为如果生产者出现问题,您的主要控制可能会冻结。结果可能是冻结表格、不响应控件等。让你的系统有机会通过命令重新建立。

限制使用固定数量的线程。我的电脑有(只有)8 个内核,你的密集型应用程序不会使用其中的一半,实际上可能只有消费者是密集型应用程序,所以可能是 12.5%。每个线程都必须有多个才能充分利用 CPU,然后您将花费大量精力管理线程。

另一种方法是使用各种现有系统之一在后台执行工作。例如 ThreadPoolExecutor 这样你就可以在它上面投入很多工作 (Runnables) 它会排队工作,并且可以扩展执行以适应它 运行 上的硬件自定义工作线程数。

或者,如果您使用的是 Swing,则 SwingWorker。这样做的好处是你可以在后台线程上做一些工作,post 在前台 (main/UI) 线程上很容易地得到结果。