Multithreading 程序失败时保存队列值的最佳方法

Multithreading 程序失败时保存队列值的最佳方法,multithreading,sqlite,queue,reliability,Multithreading,Sqlite,Queue,Reliability,假设我有一个由两个独立线程和一个队列组成的多线程应用程序。线程1完成计算并将结果放入队列。同时,线程2不断循环并检查队列中是否有任何数据需要处理 如果由于某种原因程序出现故障或计算机重新启动,如何将队列中的值临时保存到磁盘?在第一个线程完成后将该值保存在SQLite DB中,然后在线程2完成后将其删除是否合理 如果SQLite实际上是最好的解决方案,那么在一行上插入一个标志,表明它已被处理,并且每半小时有另一个线程通过并删除那些被标记的行,或者立即删除该行,会更快吗 我根本不会将队列存储在内存中

假设我有一个由两个独立线程和一个队列组成的多线程应用程序。线程1完成计算并将结果放入队列。同时,线程2不断循环并检查队列中是否有任何数据需要处理

如果由于某种原因程序出现故障或计算机重新启动,如何将队列中的值临时保存到磁盘?在第一个线程完成后将该值保存在SQLite DB中,然后在线程2完成后将其删除是否合理


如果SQLite实际上是最好的解决方案,那么在一行上插入一个标志,表明它已被处理,并且每半小时有另一个线程通过并删除那些被标记的行,或者立即删除该行,会更快吗

我根本不会将队列存储在内存中,只需将其存储在SQLLite上即可。如果线程1只是添加到队列中,而线程2是唯一读取的线程,那么只需让线程2在处理完该行后立即删除该行即可


当然,出于性能原因,在检查队列之前,线程2的等待间隔越长越好。

不要在这里使用自己的等待间隔。异步处理例程、可重启性、程序故障等最好使用消息队列进行管理

您可以使用来自Apache软件基金会的开放源码,或者利用.

在云中使用Web服务。
这里有很多不同的方式。在自己重复该功能之前,请先研究这些选项。这些领域的可靠性比您预期的更具挑战性。

一种解决方案是使用队列服务器,如Zero MQ、RabbitMQ或(商用)Tibco EMS或Websphere MQ。

我同意,我认为用MSMQ之类的东西替换内存队列或同步这两个队列是您最好的选择在查看其他建议后,Zero MQ似乎是我最好的选择。谢谢