问题描述
有一个进程 A 每隔一段时间(时间很短)往文件 F 后面加写数据,另一个进程 B 从文件 F 读数据,如何使进程 B 读的速度小于进程 A ,又要使其效率尽量高? 问题补充:xiaoyuqi00 写道
解决方案
如何使进程 B 读的速度小于进程 A ,又要使其效率尽量高?换个角度你把文件中每个字节看成队列中的节点,A一直写,你可以想象成A是往队列里面加值。B一直读,你可以想象成B从队列中取值。这时候B只需要判断队列长度是否发生了变化,如果有变化那么B就应该取值了,通过判断文件长度来触发B读取文件的事件。一开始B用非独占的模式打开文件,B获取文件大小,B读到该大小数据,B进入等待,B进行文件大小判断,如果文件到达需要读取长度B进行文件读取,B保留已经读取文件位置,进入下一个雷同操作。
解决方案二:
你说的不可控具体是指什么?一般的话可以给线程加名称来控制
解决方案三:
A线程写文件的时候加线程锁让B线程等待
解决方案四:
你这是两个进程间的同步?不是线程?进程之间,如果没有相互通信,我觉得很难保证B的速度刚好小于A,同时保证效率。用java的话,我觉得比较简单的方式是使用socket进行通信。比如读文件的进程起一个socketserver,写文件的进程每次写完数据以后,连接那个socket,发送信息说写了多少数据,然后,读文件的进程再进行相应的读取操作。
时间: 2024-12-02 07:27:19