与git服务器之间的并行/并发/多线程传输?

与git服务器之间的并行/并发/多线程传输?,git,concurrency,perforce,transfer,Git,Concurrency,Perforce,Transfer,在perforce中,我们可以启用并行同步/提交,这意味着如果需要从服务器中提取200个新文件,p4v客户端将打开到服务器的5-10个连接,并并行提取并发文件。这大大提高了传输速度,意味着单个线程的传输速度为30Mbps,而8个并发线程的传输速度为240Mbps,这尤其是因为我们的站点每周都会收到10次GB的更新 我一直在四处寻找,看看是否有类似的东西可以在我们的Gitlab服务器上启用,但我还没有找到任何东西。这是我在这个主题上找到的唯一东西,它只是一个git附件的请求: 有人知道这是否可能吗

在perforce中,我们可以启用并行同步/提交,这意味着如果需要从服务器中提取200个新文件,p4v客户端将打开到服务器的5-10个连接,并并行提取并发文件。这大大提高了传输速度,意味着单个线程的传输速度为30Mbps,而8个并发线程的传输速度为240Mbps,这尤其是因为我们的站点每周都会收到10次GB的更新

我一直在四处寻找,看看是否有类似的东西可以在我们的Gitlab服务器上启用,但我还没有找到任何东西。这是我在这个主题上找到的唯一东西,它只是一个git附件的请求:

有人知道这是否可能吗?如果有,请您为我指出正确的方向


谢谢

Git当前通过单个连接传输内容。目前无法通过其网络协议发送分块内容。由于git进行了一些处理以减少需要传输的数据的大小。因此git通常通过其单个连接传输的内容少于最终重建的内容。

只要您不一次传输一个对象(即,不这样做),客户端的
获取过程使用客户端和服务器之间的流式连接,其中,以确定客户端需要什么对象。然后,一旦对象达成一致,服务器就会将这些对象聚合到一个精简包中。此精简包针对已知的客户端对象进行增量压缩

对于非浅层存储库,服务器可以相信客户端不仅拥有被拒绝的对象,还拥有所有前置对象,因此即使对于相当大的对象集,也会生成微小的包文件(当然,这取决于前置对象的实际存在,以及服务器对这些对象进行快速压缩的能力)。例如,假设200个新的或更新的文件与200个以前的版本非常相似。精简包可能基本上由200组指令组成,这些指令会说“复制旧的
1234567…
,然后在中间添加6个字节”,而不是“这里有200 GB的原始数据”

这种瘦包的生产需要相当多的CPU时间,但即使是最慢的链路,传输也只需几秒钟

显然,如果200个新对象与以前的任何对象都不相似,或者彼此之间也不相似,那么增量压缩将不会有帮助。在这种情况下,无论zlib deflate压缩产生什么,薄型包装都将受益


在任何情况下,抓取客户端都会接收(单个)精简包文件,并通过从客户端已有的对象中添加缺少的基来将其修复为非精简包。因此,无论如何只传输一个文件。

除非您的网络没有进行合理的链接聚合,否则原则上没有理由认为多个连接比单个连接更快。当然在实践中各种疯狂的事情都会发生。。。