|
|
1
2
在重新读取文件之前,最好使用file.last modified()检查文件的上次修改时间戳。如果这个时间戳不比您上次读取文件的时间更新,您不需要费心更多的磁盘I/O来重新读取您感兴趣的块。不过要记住的一点是,如果您使用网络文件系统,那么在更新内容时,最后修改的时间戳可能不会立即更新。如果您处理的是更新文件的本地进程和运行代码读取文件的另一个本地进程,则很可能不会遇到此问题。 我过去成功使用的一种方法是让一个单独的线程在特定的时间间隔(比如5秒)上轮询文件,以获取最后修改的时间戳。如果文件已更改,请重新处理该文件并向注册的侦听器发送事件。在我的例子中,5秒比很快就能得到更新。 |
|
|
2
1
当文件被读取到内部缓冲区时,内容与磁盘上的内容是最新的。 如果要确保在下次访问时具有最新内容,还必须再次转到磁盘,跳过所有内部缓冲区和缓存。如果您真的想确定,所有这些层都被跳过,那么您必须从头重新打开文件,并按照您想要访问的位置进行搜索。 当然,如果您在每次可能访问数据时都访问磁盘,那么您的性能就会下降。不要认为是3-5倍左右,而是数量级。 |
|
|
3
0
如果您控制的另一个程序是写入文件的唯一一个程序,那么最好在同一个Java进程坐标中有2个线程。最简单的解决方案是创建
您在问题中说了“处理”,所以您可能关心系统中更改数据的任何其他处理。在这种情况下,我认为最好的办法就是重新打开并重新读取数据。如果您真的每分钟只阅读一次,那么这对性能的影响应该可以忽略不计。 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
H3007 · 并发运行python子进程似乎不是并发的 2 年前 |
|
|
The Oddler · TVar会阻止读取直到更改吗? 2 年前 |
|
|
Wang Tuma · 使用信号量的c++并发问题:按顺序打印 2 年前 |
|
|
Marcel Batista · 在不同线程中更新密钥时的字典线程安全 2 年前 |
|
|
rico · 当volatile关键字真的是必要的? 2 年前 |