gpt4 book ai didi

java - 最佳方法: tree set structure vs thread pool executor

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:28 24 4
gpt4 key购买 nike

伙计们,我在树集线程池执行器之间陷入了困境

以下是场景:

第一种方法

  1. 我必须使用其中包含任务以及每个任务优先级的结构。现在基于treeset构造函数(带有comparator接口(interface))
  2. 我可以比较任务的优先级,并据此对任务进行正确排序。
  3. 接下来,任务应该通过树集的迭代按优先级顺序处理,并逐一执行每个任务。

第二种方法

  1. 第二种方法是进行某种逻辑构建并使用线程池执行器的核心功能,为此我从this link中获得了灵感。我已经用这种方法实现了我的要求,该方法将首先选择高优先级任务并首先执行它,并且以相同的方式执行所有任务。

现在我的困惑是,就性能成本、灵 active (增加/减少线程)等而言,哪一个最好使用,为什么我应该选择它?

非常感谢任何建议和答案。

最佳答案

您的问题中包含两种不同的优先级概念:

  • 启动优先级:提交执行任务的顺序(第一种方法说明的第 1 点)

  • 运行时优先级:考虑调度线程的顺序(第 3 点)

这两个属性在您的场景中恰好相同,因此树集将帮助您定义它们。执行器将帮助您强制执行它们,但您将需要一个专门定制的执行器(基于或不基于线程池),以特定优先级启动线程。基本上,每次从优先级队列中取出一个任务时,它都应该与设置在该任务优先级级别的线程相关联。我认为这是您链接的文章中找到的执行器实现所提供的功能,因此您会做什么。

至于线程池,来自文档:

Using worker threads minimizes the overhead due to thread creation. Thread objects use a significant amount of memory, and in a large-scale application, allocating and deallocating many thread objects creates a significant memory management overhead.

工作线程是由线程池管理的线程,并且被保守地回收(而不是销毁和重新创建),以处理任务序列。我认为这对于优先级处理来说并不重要,但它会优化您对资源的使用。

关于本文的实现,代码使用简单的阻塞双端队列来处理传入任务,因此它是一个简单的 fifo 优先级方案。它不会重新排序任务。

关于java - 最佳方法: tree set structure vs thread pool executor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27143122/

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