Multithreading Kubernetes中与golang的并发文件系统访问
我的问题的一个先决条件是假设使用一个Kubernetes集群,其中多个pod访问一个文件系统存储,例如Azure文件(ReadWriteMany)。根据这一点,它依赖于SMB3,并且对于并发使用应该是安全的 在一个pod中,GO(与框架一起)被用作访问文件系统的服务器的编程语言。由于使用Multithreading Kubernetes中与golang的并发文件系统访问,multithreading,go,kubernetes,goroutine,smb,Multithreading,Go,Kubernetes,Goroutine,Smb,我的问题的一个先决条件是假设使用一个Kubernetes集群,其中多个pod访问一个文件系统存储,例如Azure文件(ReadWriteMany)。根据这一点,它依赖于SMB3,并且对于并发使用应该是安全的 在一个pod中,GO(与框架一起)被用作访问文件系统的服务器的编程语言。由于使用goroutines并行处理请求,因此文件系统访问是并发的 SMB3是否也能确保一个pod内并发读写操作的正确性,还是需要使用互斥锁或工作池之类的工具手动管理文件系统操作? 更具体地说:我想使用的是GO包装lib
goroutines
并行处理请求,因此文件系统访问是并发的
SMB3是否也能确保一个pod内并发读写操作的正确性,还是需要使用互斥锁或工作池之类的工具手动管理文件系统操作?
更具体地说:我想使用的是GO
包装libgit2
,它是用C
编写的。根据libgit2
s,它不是线程安全的:
除非另有规定,否则多个线程无法同时安全访问libgit2对象
由于git2go
没有另行指定,因此我假设,对文件系统上同一存储库的不同引用不能从不同的goroutine同时使用
总结我的问题:
- 网络通信协议(如SMB3)是否也使文件系统操作在本地具有线程安全性
- 如果没有:如何确保在
中对线程安全的文件系统进行访问?这似乎是一个不错的选择,但它也是内部的GO
bare
git存储库(没有索引),我正在对git2go
返回的结构执行不同的操作。此结构可能引用同一存储库。因此,两个客户端有可能同时在同一个回购协议上触发一个操作(如提交)。我的一个想法是阻止任何操作的整个回购。例如,我会通过操作队列来实现这一点,但这可能会导致瓶颈。