首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈还是LinkedList用于ObjectPool?

堆栈还是LinkedList用于ObjectPool?
EN

Stack Overflow用户
提问于 2012-05-09 19:38:00
回答 2查看 874关注 0票数 4

我确信正确的答案取决于池对象的类型和工作负载,因此我将详细介绍我的实现:

我有一个用于池长时间运行的命令行进程的ObjectPool。这些进程通过stdin/stdout进行通信,并执行文件/网络操作。许多任务的完成速度比其他任务快得多,并且可能很快将进程返回到池中。对池的所有访问都必须是线程安全的。

我的问题是,我最好还是用LIFO/Stack或者FIFO/ConcurrentLinkedQueue来管理池呢?我在双方的推理:

  • 堆栈使“热”对象处于运行状态,其中资源可能会被缓存/保持更长的时间。
  • FIFO在进程之间的调用更均匀,每个进程的工作量都更少。谢谢!
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 00:28:46

我的第一个想法是:基准测试它!你们的两个论点似乎都是合理的。您应该实现这两种策略,并对其中哪种策略进行测试,从而获得更高的吞吐量。

您在问题中描述的问题类似于进程调度操作系统必须面对的问题。因此,也许利用优先次序是有益的。使用PriorityQueue并为您的任务分配不同的优先级,这可能随着时间的推移而动态变化,例如使用老化

最后但并非最不重要的一点是,正如注释中已经指出的,您可以尝试两个ConcurrentLinkDeque,并让一些获取前面的对象和一些后面的对象。在这里,我的建议也是尝试和衡量哪种平衡最有效。

票数 3
EN

Stack Overflow用户

发布于 2012-07-20 00:36:07

这可能对性能没有什么影响。做任何最容易编码的事情,让你的代码更容易理解。当您正在处理执行文件和网络I/O的命令行进程时,这里和那里的缓存丢失不会产生任何影响.它们将以数量级的优势占据主导地位。

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

https://stackoverflow.com/questions/10522956

复制
相关文章

相似问题

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