为什么锁定通过 SMB 共享的文件仅需 3 微秒?

为什么锁定通过 SMB 共享的文件仅需 3 微秒?

我使用以下 C++ 函数锁定服务器通过 SMB 共享的文件的 1 个字节:

在 Windows 上:

LockFileEx (h, LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK, 0, 1,0, &overlapped)

在 Linux 和 Mac OS 上:

fcntl (fd, F_SETLK, &flockdesc)

对于本地共享文件和通过 SMB 共享的文件,我仅用 3 微秒就成功锁定,而对于通过 NFS 共享的文件,我则用 26 毫秒就成功锁定了文件。

我无法理解一个进程如何能够在 3 微秒内通过网络获得锁,因为与服务器通信至少需要几毫秒的时间,就像在 NFS 上共享文件的情况下所观察到的那样。

有人能帮我找出为什么会发生这种情况吗?

答案1

发生这种情况的原因是 Windows 使用 oplocks 进行锁定 ->https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/oplock-overview

相关内容