我试图实现一个有生产者和N(N> = 1)个工人的程序。他们使用消息队列进行通信。 这个想法是生产者发送队列“任务”。工作人员通过msgrcv()调用来获取任务并执行一些代码。在工作人员完成任务之后,它将计算结果发送到队列。制片人会收到此讯息并保存结果。在进程之间同步消息队列
我正在使用POSIX消息队列,并且生产者和工作者同时工作。
这个程序背后的问题是存在一个危及通信的场景。 每条消息的大小约为5000字节。在UNIX系统中,最大队列大小为〜16000字节。
该场景是:队列中有3个任务(5000 * 3 = 15000字节)。某些工作人员从队列中获取一条消息(现在该队列有10000个字节)。工作人员开始执行任务,并且由于工作人员必须在每个任务中处理的字节数量,生产者会向队列发送另一条消息(队列现在已满)。 现在任务完成后,工作人员尝试将结果发送到队列并被阻塞(队列已满)。生产者试图将另一个任务发送到队列并被阻塞。
如果我只用一个工人运行这个程序,这种情况发生的可能性很大。
有没有人有一个想法,以避免这种情况?
我会考虑使用没有这些限制的消息排队机制,而不是使用某些看起来根本不适合您的用例的东西。 (除非你很难要求使用POSIX MQ)。也许ZeroMQ--我相信它可以作为一个轻量级嵌入式库。 – millimoose
谢谢你的快速回答。是的,在这种情况下,我必须使用POSIX MQ。 –
在一个程序或多个进程中使用多个线程吗? – Dmitri