使用java IO,似乎分支新进程为进程B提供了更好的能力,使进程B读取进程A写入文件的数据,而不是线程A写入线程B尝试读取的文件时可以获得的数据(在同一过程中。)
似乎规则与内存模型不具有可比性。那么什么基于文件的并发工作?参考文献将不胜感激。
答案 0 :(得分:4)
这样的任何观察都必须是特定于操作系统的,并且可能特定于操作系统的不同版本(内核)。你在这里遇到的可能与操作系统实现线程和线程调度的方式有关。 Java平台几乎没有为这种事情进行调优。
IMO,如果您需要更好的性能,您可能不应该将文件用作同一JVM中两个线程之间的数据传输通道。对应用程序进行编码,以检测线程是否位于同一JVM中并使用(比如)Java Pipe流。
答案 1 :(得分:0)
也许它可能与线程和进程阻塞有关。
当进程需要资源(写入/读取文件)时,它会阻塞直到S.O.满足要求并返回流程。
如果您没有使用hyperthreading,则具有两个线程的进程将阻止两个线程以完成每个任务的完成。但如果你将它们分开,也许是S.O.可以优化访问并更好地对读/写进行并行化。
(只是猜测:)