【发布时间】:2014-04-30 02:25:59
【问题描述】:
消息队列也可以在程序内部使用,在这种情况下,它通常只是一种将数据从生产者线程交换/排队到消费者线程以进行异步处理的工具。
现在对于异步处理,我可以简单地创建线程...如果我在内部使用队列,这不是进行异步处理的开销吗???
请用有效的解释回答是或否。
【问题讨论】:
标签: multithreading architecture queue jms
消息队列也可以在程序内部使用,在这种情况下,它通常只是一种将数据从生产者线程交换/排队到消费者线程以进行异步处理的工具。
现在对于异步处理,我可以简单地创建线程...如果我在内部使用队列,这不是进行异步处理的开销吗???
请用有效的解释回答是或否。
【问题讨论】:
标签: multithreading architecture queue jms
与生产者线程将缓冲区、任务或对象指针推入队列并随后由消费者线程出列队列相比,创建线程所花费的时间要长得多,因此不可避免的开销比不断创建线程要少得多。
如果你不断地创建线程,你就必须不断地终止和销毁它们。这是更多的开销,而且,无论如何,经常出错,导致线程失控、关闭失败和模糊的内存泄漏。
线程池和应用程序生命周期线程更安全、更干净、更易于调试,并且更不容易出现灾难性故障/错误,更糟糕的是,间歇性“偏离规范”:)
【讨论】:
队列优于多线程有什么优势
我认为优势与可靠性等非功能性需求有关:
如果处理消息时发生错误,它可以保留在队列中,直到进程执行正常。
更进一步的做法是将消息持久化到数据库中,这样您就可以在系统突然出现故障时稍后处理该消息。
如果我在内部使用队列,这不是进行异步处理的开销
这取决于上面列出的非功能性需求对您的应用程序是否重要,否则创建一个新线程就足够了。
【讨论】: