我正处于一个问题之中,我无法决定采用哪种解决方案。
这个问题有点独特。这么说吧,我不断地从网络接收数据(每秒 2 到 4 次)。现在每个数据都属于一个不同的,比如说,组。现在,让我们将这些组称为 group1、group2 等。
每个组都有一个专用的作业队列,来自网络的数据被过滤并添加到相应的组中进行处理。
起初,我为每个组创建了一个专用线程,该线程将从作业队列中获取数据,对其进行处理,然后进入阻塞状态(使用链接阻塞队列)。
但是我的学长建议我应该使用线程池,因为这样线程不会被阻塞,并且可以被其他组用于处理。
但事情是这样的,我获取的数据足够快,线程处理它所花费的时间足够长,线程可能不会进入阻塞模式。这也将保证数据按顺序处理(作业 1 在作业 2 之前完成),在池中,这种情况很少发生,可能不会发生。
我的学长也坚持这样一个事实,即池化也会为我们节省大量内存,因为线程是 POOLED 的(我认为他真的很喜欢这个词;))。虽然我不同意这一点,因为我个人认为,是否每个线程都获得了自己的堆栈内存。除非线程池中有我不知道的东西。
最后一件事,我一直认为汇集有助于短期内大量出现工作。这是有道理的,因为线程生成会导致性能下降,因为初始化线程所花费的时间远远超过完成工作所花费的时间。因此,池化在这里有很大帮助。
但在我的情况下,group1、group2、...、groupN 始终保持活动状态。因此,无论是否有数据,它们仍然会存在。所以线程生成不是这里的问题。
我的上级不相信,并希望我使用池解决方案,因为它的内存占用很大。
那么,该走哪条路呢?
谢谢你。