我正在绞尽脑汁,但找不到解决方案。请考虑这种情况:
我有一些写入器想要将非阻塞“队列”写入本地网络上的另一台机器,并且有一个读取器将读取数据(如果没有写入器则为阻塞模式)并执行一些工作 A 然后返回一个小时并获取下一个数据。
所以场景是这样的:
- 作家写
- 作家写
- 作家写
- 作家写
- 作家写
读者阅读并做作业
在读者忙碌的同时:
- 作家写
- 作家写
- 作家写
- 作家写
- 作家写
- 等...
我想我可以用一个 tcp 守护进程作为阅读器来做到这一点,但这意味着它会与 fork 同时运行,我希望阅读器一次处理一个,因为它会做一个 cpu 饥饿的工作.
我想过让一个 tcp 服务器获取请求,然后向 FIFO 发出信号,并让另一个守护进程从 FIFO 中读取,但它具有相同的局限性。
我的意思是当写入器写入时 FIFO 必须读取,并且我希望写入器的写入速度比读取器快很多倍。
数据库解决方案可以,但是 a) 它不是很快并且 b) 读者没有锁定..我不想用 sleep(x) 来实现它,这似乎不是一个好的编程技术.
有什么解决办法吗?
最佳答案
这听起来好像你有一个 producer-consumer problem .查看维基百科文章中的各种实现,看看其中是否满足您的需求。
关于c - 不完全是先进先出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1502577/