首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在我的java视频应用程序中实现消费者/生产者模式吗?如果是,如何实现?

我应该在我的java视频应用程序中实现消费者/生产者模式吗?如果是,如何实现?
EN

Stack Overflow用户
提问于 2015-03-01 08:09:09
回答 2查看 233关注 0票数 0

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

如果我写到数据库并在一个线程上运行应用程序,我担心硬盘的访问时间,而我遇到的最好的解决方案是用多线程实现生产者/消费者模式。我发现的所有示例都实现了3个线程:

  1. 主螺纹
  2. 出厂线
  3. 消费者线

与2线程实现相比,这样做有什么好处吗?

  1. 主线和出厂线
  2. 消费者线

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-01 08:33:34

它限制使用固定数量的线程。我的个人电脑只有8个内核,你的强化应用程序不会使用其中的一半,实际上可能只有消费者才是密集型应用,所以可能只有12.5%。为了充分利用CPU,您需要每个线程中的几个线程,然后您将花费大量的精力来管理线程。

另一种方法是使用各种现有系统之一在后台执行工作。例如,ThreadPoolExecutor只需在它上抛出大量的工作(Runnables),它就会对工作进行队列处理,并且可以通过自定义工作线程的数量来缩放执行,以适应它正在运行的硬件。

或者如果您使用的是Swing,那么SwingWorker。这样做的优点是您可以在后台线程上做一些工作,并轻松地将结果发布到前台(main/UI)线程上。

票数 4
EN

Stack Overflow用户

发布于 2015-03-01 08:20:59

你的问题是概念性的,所以我认为它是属于这里的:Programmers

但是,从我的经验中可以得到一个简短的提示,你将生产者和主生产者分开,因为如果生产者出了问题,你的主控制可能会冻结。结果可能是冻结的表单、没有响应的控件等。给你的系统一个通过命令重建的机会。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28791424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档