NFS is intended to allow a computer to access files over a network as if they were on a local disk.It achieves this via a client-server interface, where one machine exports a drive or portion of a drive, and another machine mounts the export locally.
This prevents data corruption, and allows handshaking between cooperative processes. This is required so that if a program is terminated, any locks that it has are released.
It also allows the operations to be atomic, meaning that a lock cannot be obtained by multiple processes.
Additionally, it does not help in the case where two clients are accessing the same file from machines with drifting clocks.
Programs use file locking to insure that concurrent access to files does not occur except when guaranteed to be safe.
Programs often do not expect time difference like this, and may end abnormally or behave strangely, as various tasks timeout instantly, or take extraordinarily long while to timeout.
Poor time synchronization also makes debugging problems difficult, because there is no easy way to establish a chronology of events.The advantage of this is that there is no additional burden placed on the server for additional clients (except for any load incurred by actual data transfer).The idea is that while clients will probably use only a few servers, servers will need to support large numbers of clients.In addition to scalability, using RPC allows NFS to be extremely robust in the event of failure on either the client or server.If a client fails, the server will typically not notice.In fact, NFS is not stateless from the client point of view, but it is from the server point of view.