Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Kubernetes中与golang的并发文件系统访问_Multithreading_Go_Kubernetes_Goroutine_Smb - Fatal编程技术网

Multithreading Kubernetes中与golang的并发文件系统访问

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

我的问题的一个先决条件是假设使用一个Kubernetes集群,其中多个pod访问一个文件系统存储,例如Azure文件(ReadWriteMany)。根据这一点,它依赖于SMB3,并且对于并发使用应该是安全的

在一个pod中,GO(与框架一起)被用作访问文件系统的服务器的编程语言。由于使用
goroutines
并行处理请求,因此文件系统访问是并发的

SMB3是否也能确保一个pod内并发读写操作的正确性,还是需要使用互斥锁或工作池之类的工具手动管理文件系统操作? 更具体地说:我想使用的是
GO
包装
libgit2
,它是用
C
编写的。根据
libgit2
s,它不是线程安全的:

除非另有规定,否则多个线程无法同时安全访问libgit2对象

由于
git2go
没有另行指定,因此我假设,对文件系统上同一存储库的不同引用不能从不同的goroutine同时使用

总结我的问题:

  • 网络通信协议(如SMB3)是否也使文件系统操作在本地具有线程安全性
  • 如果没有:如何确保在
    GO
    中对线程安全的文件系统进行访问?这似乎是一个不错的选择,但它也是内部的

我认为这很难回答,除非你们都是libgit2语义和SMB3方面的专家。你能解释一下你想用libgit2做什么吗<代码>“使”文件系统操作在本地线程安全?这取决于您对文件系统所做的操作,以及您是否试图更改相同的文件等。Git会使大量不同的文件系统操作在线程和POD之间相互干扰-没有文件系统会让它神奇地“安全”。我使用的是
bare
git存储库(没有索引),我正在对
git2go
返回的结构执行不同的操作。此结构可能引用同一存储库。因此,两个客户端有可能同时在同一个回购协议上触发一个操作(如提交)。我的一个想法是阻止任何操作的整个回购。例如,我会通过操作队列来实现这一点,但这可能会导致瓶颈。