我确信对此的正确答案取决于池对象的类型和工作负载,所以我将详细介绍一下我的实现:
我有一个 ObjectPool 用于汇集长时间运行的命令行进程。这些进程通过标准输入/标准输出进行通信,并执行文件/网络操作。许多任务的完成速度比其他任务快得多,并且可能会很快将进程返回到池中。对池的所有访问都必须是线程安全的。
我的问题是,我是使用 LIFO/Stack 还是 FIFO/ConcurrentLinkedQueue 来管理池更好?我的两面推理:
- 堆栈保持“热”对象在运行,其中资源可能保持缓存/等。更长时间。
- FIFO 在进程之间更均匀地平衡调用,每个进程做的工作更少。谢谢!