#15734·Go

cmd/go: 一旦导出数据准备就绪,即开始构建依赖包

作者: josharian创建于 2016年5月18日更新于 2026年9月17日
标签ToolSpeed

8个核心机器运行着“去建 - std”的活性:

!. [trace building std] (https://cloud.githubusercontent.com/assets/67496/15375421/d9e4433c-1d03-11e6-84f6-a5dd03774d56.png).

对于那些想更多探索的人,这里是html版. (提示:使用a,d,w,和s键来导航. )

早期有一些瓶颈( " 运行时间 " 、 " 反映 " 、 " fmt " ),结尾处有一个很长的近线性部分( " 网 " 、 " crypto/x509 " 、 " crypto/tls " 、 " net/http " )。 关键的路径安排(# 8893) 可以帮助一些人做到这一点, 早期的cgo引用(# 15681) 也有帮助。 这个问题是要讨论另一项补充这些建议的建议。

我们目前等待一个软件包完成构建后,才能构建依赖于它的数据包. 然而,依赖软件包只需要导出数据,而不是机器代码就可以开始构建. 我认为,一旦我们完成了逃生分析和关闭改造,并在我们进行`行走'之前,就能够做到这一点。

关于上述瓶颈:

QQ 包 QQ 等待导出数据的时间 QQ 总编译时间 QQ | -- -- -- -- -- -- -- -- -- -- -- -- -- 运行时间 226米 1300米 反射出 174 ms 960 ms {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}请检查date=中的日期值 (帮助) 净分 114分 846分 密码/x509x66ms 253ms=== 密码/tls 82ms | 461ms | 净点/http 168ms 1310ms

虽然略为乐观(书面出口数据不是即时的),但这确实表明,这一般会大大减少等待依赖者汇编的时间。

这种大型的,慢的,线性依赖链的模式也出现在更大的项目中,如juju.

@rsc通过添加从机器代码中单独发送导出数据的旗帜来实施一个赋能作品.

执行这项工作的剩余工作和未决问题:

  • 在`行走 ' 之前输入导出数据,意味着内含函数在使用时,而不是在最初的软件包汇编时,会走走和扩大。 这重要吗? 如果是的话,一个选项是改变编译器结构来行走所有函数,然后编译所有函数. 这能增加水的记忆吗?
  • 编译器将如何向CMd/GO发出信号,显示它已排放出口数据? 我不知道一个干净,简单,可移植的跨过程 semphore。
  • 这将是一个相当大的动荡 如何CMD/go时间表构建。 使这项工作更加精细 将是有用的 无论如何,但这将是很多 高风险改变。

鉴于修改的范围,我将此标为提案. 我喜欢反馈.