java文件系统的并发性是什么?

java文件系统的并发性是什么?,java,file,concurrency,Java,File,Concurrency,使用java IO,看起来分叉一个新进程会使进程B更好地读取进程a写入文件的数据,而不是线程a写入线程B试图读取的文件(在同一进程内)时所能获得的数据 这些规则似乎无法与记忆模型相比较。那么什么是基于文件的并发呢?请参考。任何类似的观察结果都是特定于操作系统的,并且可能特定于不同版本的操作系统(内核)。您在这里遇到的问题可能与操作系统实现线程的方式以及线程调度有关。Java平台在这类事情的调优方面提供的帮助很少 在我看来,如果您需要更好的性能,您可能不应该使用文件作为同一JVM中两个线程之间的数

使用java IO,看起来分叉一个新进程会使进程B更好地读取进程a写入文件的数据,而不是线程a写入线程B试图读取的文件(在同一进程内)时所能获得的数据


这些规则似乎无法与记忆模型相比较。那么什么是基于文件的并发呢?请参考。

任何类似的观察结果都是特定于操作系统的,并且可能特定于不同版本的操作系统(内核)。您在这里遇到的问题可能与操作系统实现线程的方式以及线程调度有关。Java平台在这类事情的调优方面提供的帮助很少


在我看来,如果您需要更好的性能,您可能不应该使用文件作为同一JVM中两个线程之间的数据传输通道。编写应用程序代码,以检测线程是否在同一JVM中并置,并使用(比如)Java管道流。

可能与线程和进程阻塞有关

当流程需要资源(写入/读取文件)时,它会阻塞,直到S.O.满足要求并向流程返回某些内容

如果您不使用具有两个线程的进程,则将阻止两个线程来完成每个任务。但是如果你把它们分开,也许S.O.可以优化访问并更好地并行读/写


(只是猜测:)

您是如何得出结论“分叉一个新的进程可以让进程B更好地读取数据的”?它在所有操作系统中都是一致的吗?它在Linux 2.6.32上是这样工作的,并且有很大的优势。这就是我所知道的。你能提供一个示例程序来证明这种差异吗?安侬:看看这篇文章