我是系统编程的新手,如果我的疑问非常模糊,请注意我。
我读到使用内置的用户空间缓冲区,以便我们可以通过内核的系统调用访问块大小的数据,这需要巨大的开销,但在用户空间中,我们可以对小型数据进行微小的访问。我了解这种方法是如何有效的,但我不明白的是,因为这些用户缓冲区与打开文件的每个进程有关。
当两个进程同时访问文件时,进程将如何识别对文件所做的微小更改。
这不会产生问题,因为进程将访问旧数据,但不会访问仍在用户空间缓冲区中的其他进程更改的数据。
如果有任何错误,请提醒我。
是的,这会发生。 存在进程间争用条件,并且在缓冲 IO 时可能会产生奇怪的行为。 不过,一般来说,输入没有缓冲那么多(通常一次只有一行),所以它并没有那么糟糕。 有一些方法可以通过一个名为 mmap
.
在某些情况下,您希望多个进程进行通信,因此我们使用管道/套接字或其他形式的IPC(进程间通信)。
虽然,要回答你的主要问题:不,这并没有真正造成一个大问题。 如果两个进程在执行时不打算相互了解,为什么它们在同一个文件上运行? 它只是不那么常见,当它发生时,会发生一些奇怪的事情,用户本能地一次运行一个程序并且它是固定的。