LinkedBlockingQueue 的 Java 性能问题

2024-01-26

这是我在 stackoverflow 上的第一篇文章...我希望有人能帮助我

我的 Java 6 性能大幅下降LinkedBlockingQueue。 在第一个线程中,我生成一些对象并将其推入队列 在第二个线程中,我将这些对象拉出来。当take()的方法LinkedBlockingQueue被频繁调用。 我监控了整个计划take()方法占用了总体时间最长的时间。 吞吐量从 ~58Mb/s 变为 0.9Mb/s...

使用此类中的静态方法调用队列 pop 和 take 方法

public class C_myMessageQueue {

    private static final LinkedBlockingQueue<C_myMessageObject> x_queue = new LinkedBlockingQueue<C_myMessageObject>( 50000 );

    /**
     * @param message
     * @throws InterruptedException
     * @throws NullPointerException
     */
    public static void addMyMessage( C_myMessageObject message )
            throws InterruptedException, NullPointerException {
        x_queue.put( message );
    }

    /**
     * @return Die erste message der MesseageQueue
     * @throws InterruptedException
     */
    public static C_myMessageObject getMyMessage() throws InterruptedException {
        return x_queue.take();
    }
}

我怎样才能调整take()方法来完成至少 25Mb/s,或者是否有其他我可以使用的类,当“队列”已满或空时它将阻塞。

亲切的问候

Bart

P.S.:抱歉我的英语不好,我来自德国;)


你的生产者线程很简单放入的元素多于消费者消耗的元素,因此队列最终达到其容量限制,因此生产者等待。

巩固我原来的答案,现在我们基本上有了全貌:

  • 您达到了固有的吞吐量限制LinkedBlockingQueue(每个队列都有一个)通过极快的速度put()s,其中甚至连续take()s,进一步处理为零,无法跟上。 (顺便说一句,这表明在这种结构中,无论如何,在您的 JVM 和机器上,put() 的成本至少比读取稍高一些)。
  • 由于消费者锁定了一个特定的锁,因此放置更多的消费者线程可能没有帮助(如果你的消费者实际上正在做一些处理并且限制了吞吐量,那么添加更多的消费者会有所帮助。对于以下场景有更好的队列实现:超过一个消费者(或生产者),你可以尝试SynchronousQueue, ConcurrentLinkedQueue,以及即将到来的TransferQueuejsr166y)。

一些建议:

  • 尝试创建更粗粒度的对象,以便对每个对象进行排队的开销与从生产线程卸载的实际工作相平衡(在您的情况下,似乎您为代表可忽略不计的工作量的对象创建了很多通信开销)
  • 您还可以让生产者通过卸载一些消耗性工作来帮助消费者(当有工作要做时,无所事事地等待没有多大意义)。

/在 John W. 正确指出我原来的答案具有误导性后更新

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinkedBlockingQueue 的 Java 性能问题 的相关文章

随机推荐

  • UISplitViewController PrimaryViewController 视图框架的值错误

    我有一个 UISplitViewController 和 2 个自定义 viewController 当我去设置主视图控制器并想要获取视图的框架时 它给了我一个完全奇怪的值 并且当我使用它来将部分内容绘制出屏幕时 这是我在故事板中的设置 这
  • 如何在 Django 500.html 页面中包含堆栈跟踪?

    我在跑Django 1 0我即将部署我的应用程序 因此 我将把 DEBUG 设置更改为 False 话虽如此 当错误发生时 我仍然希望在 500 html 页面上包含堆栈跟踪 通过这样做 用户可以复制并粘贴错误并轻松地将其通过电子邮件发送给
  • 联系表单脚本未发送表单

    我有这个 PHP 联系表单脚本 如下所示 我以前使用过它 所以我知道它可以工作 但是 由于我将 html 表单隐藏在一个新的 jQuery 支持的 div 中 div class toggle hidemail href Email us
  • 传入工作日名称以获取 SQL 中最接近的日期

    我正在研究一个处理频率值的查询 即星期一 星期二等 思考作业 所以在我的查询中我目前的结果是 jobId 1 personId 100 frequencyVal Mondays jobId 2 personId 101 frequencyV
  • JavaFX - 动态关闭 TabPane 中的选项卡

    我有一个带有可关闭选项卡的 TabPane 当用户单击选项卡内容中的按钮时 我想触发 关闭选项卡事件 这是用户单击按钮时调用的方法 public class CustomTab extends Tab protected void clos
  • 我应该安装@types/node吗? VSCode 好像自动安装了

    我看到很多人都在安装 types node在他们的开发依赖项中 但是 如果您在 VSCode 中打开一个空文件夹 并创建一个空的 js 文件 然后输入 const fs require fs lt hover it and type sho
  • GNU Make for 带有两个变量的循环

    我想写一些这样的内容 foreach var1 var2 LIST1 LIST2 cp var1 var2 我该如何在 GNU makefile 中执行此操作 Beta关于使用join的建议是正确的 但问题是 以构造包含空格的命令行的方式使
  • Firestore 活动文档快照侦听器中断排序

    我遇到了一个 Firestore 问题 希望有人可以帮助我解决 我有一个活动文档快照侦听器 它似乎破坏了排序行为 我不确定为什么 在组件的构造函数中 我初始化文档快照侦听器一次 this listen this fs collection
  • 数据库允许应用程序始终通过 SP 进行 CRUD 操作是最佳实践吗?

    我听过这背后的推理 我很好奇其他人是否认为这是最佳实践 好主意 一种推理是 限制对数据库表的直接访问 并强制应用程序 用户使用 SP 存储过程 进行 CRUD 操作将允许 DBA 在将 SP 投入生产之前进行细粒度控制以批准 审查 SP 避
  • 从 monodroid 类库访问资源

    是否可以从引用类库的 monodroid 应用程序中的 monodroid 类库访问文件 使用构建操作 AndroidAsset 我在类库中创建了一个 Assets 文件夹 并添加了一个带有构建操作 Android Asset 的文本文件
  • 如何减少 TextField 上 prefixIcon 的填充?

    我不知道如何超越 48px 材质库默认值 我快速浏览了 SDK 但没有找到任何东西 我知道这与 prefixIcon 参数本身有关 因为无论里面放什么 它总是 48px 或其他任何值 我有一个自定义 SDK 所以如果有人知道它在哪里 我想减
  • GIT 接收后结账,无需根文件夹

    我是 git 新手 试图弄清楚如何通过检查网络根目录来更新每次推送的网站 我搜索了 stackoverflow 只找到了有关如何克隆的主题 这不是我想要的 到目前为止 我已经设置了本地和远程存储库 以及接收后挂钩 bin sh GIT WO
  • iOS:在 UIImage 上绘制 NSString 和边框

    我想在我已有的 UIImage 上绘制一个 NSString 和一个边框 我找到了一种将 NSString 绘制为 UIImage 的方法 但我需要它在我提供的图像上绘制 UIImage imageFromText NSString tex
  • Android Firebase Analytics 控制台中的自定义事件报告

    如果这是发布此问题的不正确位置 请提前接受我的歉意 因为我不确定会是什么 我想要完成的是甚至使用 Firebase 分析来记录自定义 该分析在 Firebase 控制台中生成与他们的示例类似的报告select content事件 其触发方式
  • 无法安装 phpMyAdmin 错误:php71w-common 与 php-common-5.4.16-43.el7_4.1.x86_64 冲突

    我刚刚安装了 CentOS 7 和 PHP 7 1xx 和 MySQL 但无法安装 phpMyAdmin 我有一条错误消息 但在 Google 上没有答案 是的 只有一个答案 但它本身给了我相同的错误消息 rpm iUvh http dl
  • MySQL:`... ADD INDEX(a); 之间的区别... ADD INDEX(b);` 和 `... ADD INDEX(a,b);`?

    有人可以告诉我这两者有什么区别 ALTER TABLE x1 ADD INDEX a ALTER TABLE x1 ADD INDEX b AND ALTER TABLE x1 ADD INDEX a b 我知道这涉及到最基本的问题 但有时
  • Javascript 合并具有嵌套属性的对象

    让我们看一下下面的例子 var ref fullName rules type string minLength 4 maxLength 64 description Full name of a user var user fullNam
  • 如何将大文件导入到 PostgreSQL 中?

    我在一个新项目中 现在必须使用现有的 PostgreSQL 数据库 该应用程序是使用 CakePHP 构建的 我在导入时面临的问题是数据库的文件大小约为 4 8 GB 而我对 PostgreSQL 完全陌生 我曾研究过 MySql 和 No
  • 数据结构填充

    C 中的数据结构填充是什么以及如何检查填充字节的字节数 class a public int x int y int z 处理器要求某些类型的数据具有特定的对齐方式 例如 处理器可能需要int位于 4 字节边界上 因此 例如 一个int可以
  • LinkedBlockingQueue 的 Java 性能问题

    这是我在 stackoverflow 上的第一篇文章 我希望有人能帮助我 我的 Java 6 性能大幅下降LinkedBlockingQueue 在第一个线程中 我生成一些对象并将其推入队列 在第二个线程中 我将这些对象拉出来 当take