我正在绞尽脑汁,但找不到解决方案。请考虑这种情况:
我有作家想要将非阻塞“队列”写入本地网络上的另一台机器,并且有一个阅读器将读取数据(如果没有作家,则为阻塞模式)并执行一些工作 A,然后在很长一段时间后返回并获取下一个数据。
所以场景是这样的:
- 作家写道
- 作家写道
- 作家写道
- 作家写道
- 作家写道
读者阅读和工作
在读者忙碌的同时:
- 作家写道
- 作家写道
- 作家写道
- 作家写道
- 作家写道
- ETC ...
我想我可以用一个 tcp 守护进程作为阅读器来做到这一点,但这意味着它将与 fork(s) 同时运行,我希望阅读器一次处理一个,因为它会做一个 cpu 饥饿的工作。
我曾想过让 tcp 服务器获取请求,然后向 FIFO 发出信号,并从 FIFO 中读取另一个守护程序,但它具有相同的限制。
我的意思是 FIFO 必须在写入器写入时读取,并且我希望写入器的写入速度比读取器快很多倍。
一个 db 解决方案可以,但是 a) 它不是很快,b) 读者没有锁定..我不想用 sleep(x) 来实现它,这似乎不是一个好的编程技术。
有什么解决办法吗?