这是问题描述:
我有一个代表工作单元的对象(将大量数据上传到服务器)。对象应一次按FIFO序列(队列)进行处理(上载)。处理完一个对象后,它需要发信号通知下一个需要启动的对象。
还有一些其他极端情况/注意事项。首先,如果队列为空并且插入了对象,则需要立即开始处理。其次,整个队列需要保留,并且能够从终止的程序中恢复。
任何想法如何为该解决方案建模?我有一个具有解决方案的应用程序,但是有点毛茸茸,而且不太简洁。寻找雄辩的东西。
答案 0 :(得分:2)
如@AShelly所述,您所描述的是一个Producer-Consumer问题,其中典型的基础数据结构是一个队列。
更具体地说,您有一个过程可以生成要上传到服务器的数据。这个过程就是生产者。另一个过程是将这些数据存储到服务器,这意味着该过程是使用者。
棘手的部分是同步这两个过程,通常使用信号量来实现。
到目前为止,此答案涵盖了您的全部内容,但第二种情况是,它要求使用非临时性的数据结构。
一种方法是创建一个persistent Queue,因为它已经与Producer-Consumer问题中使用的典型数据结构匹配。
腔:当程序在处理过程中终止时,对象会发生什么?它从头开始,还是以某种方式继续从上次中断的地方继续?您可以将其留待以后使用,并在此过程中做出个人选择。
答案 1 :(得分:1)
首先,您在这里需要多个数据结构。 1.使用Queue处理事件(处理器和助手相互交谈)2.持久数据结构(有大量可用信息,请查看Wiki)。
第二,您要如何处理信号?是基于任何优先级还是仅基于FIFO?
第三,如果您正在开发android应用,则已经有可用的API。我不确定您要寻找哪个平台。
答案 2 :(得分:1)
如果对象必须是持久性的,则使用mmap对文件进行队列是一种可行的解决方案。两个线程或两个进程都可以与一个对象一起放入队列,然后在服务器中进行上传。可以在它们之间维护IPC,例如队列,管道或fifo。在系统重新引导时,可以从mmap文件还原此IPC。如果持久队列IPC可用,那也是一个很好的解决方案。它取决于诸如队列限制或对象有多大之类的方面。