2

所以我在小型应用程序中使用了多线程。在这里创建一个新线程,在那里创建一个新线程。

我目前正在开发一个监控 IRC 聊天的程序。对于每个有效的命令,它都会创建一个线程,做一些工作,并将结果输出到聊天中。有时应用程序会在短时间内获得 10 个或更多有效命令,并创建 10 个或更多线程。应用程序开始真正变慢。我读过创建和关闭线程对资源的成本效率非常低,所以我想改变我的方法。

我的一个想法是创建一些线程(5 个左右?),这些线程总是使用一种方法运行,我将命令传递给该方法以 FIFO 为基础对它们进行排队。在我实现这个之前,我想看看是否有更好的东西我应该使用。当然,我不想逃跑并重新发明轮子。

4

1 回答 1

6

您可以使用固定大小的ExecutorService线程轮询。提交每条消息以作为任务发送,它们将被发送,因为有一个空闲线程。例如

ExecutorService es = Executors.newFixedThreadPool(5);

注意:这可能会导致消息乱序发送,因此您的客户端应该能够根据时间戳对消息重新排序。


顺便说一句:如果一次执行 10 个命令非常慢,则不是线程的创建会导致这种情况。线程很贵,是的,但没那么贵。相反,它很可能是网络延迟或其他一些阻塞操作。如果您的网络连接不佳,您可能需要为每个客户端创建 qa 队列。

于 2013-01-02T16:01:52.917 回答