消息队列也可能在程序内部使用,在这种情况下,它通常只是将数据从生产者线程交换/排队到消费者线程以进行异步处理的工具。
现在用于异步处理我可以简单地创建线程...如果我在内部使用队列这不是一个进行异步处理的开销???
请通过有效的解释回答是或否。
答案 0 :(得分:1)
创建一个线程需要比生成器线程更长的时间,这个线程将缓冲区,任务或对象指针推送到一个队列上,然后由一个消费者线程进行队列化,因此不可避免的开销远远小于不断创建线程。
如果您不断创建线程,则必须不断终止并销毁它们。这是更多的开销,无论如何,经常出错,导致线程失控,关机失败和模糊的内存泄漏。
线程池和应用程序生命周期线程更安全,更清洁,更易于调试,更不容易出现灾难性故障/错误,更糟糕的是,间歇性的“偏离规范”:)
答案 1 :(得分:0)
多线程队列的优点是什么
我认为优势与非功能性要求有关,例如可靠性:
如果处理邮件时发生错误,它可以保留在队列中,直到进程执行正常。
更进一步是将消息保留在数据库中,如果系统突然失败,您可以稍后处理该消息。
如果我在内部使用队列,这不是进行异步处理的开销
这取决于上面列出的非功能性要求是否对您的应用程序很重要,否则创建一个新的线程就足够了。