Go1.3新特性 栈的全新实现—连续栈(4)

abv123456789 · · 4262 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface


迄今为止的实验

目前我已经有一个标准的实施在运行了,虽然还不完整但是已经已经能编译简单的例子。

Peano(test/peano.go)修改后在跑到11!的时候比以前快了10%。虽然说要持有怀疑态度的看待这个问题,但是这个速度确实跟栈的增长方式是息息相关的(每次增长加倍栈的大小时会有10%速度提升,每次增加50%的栈大小时,只有2%的提升,每次增加25%反而会慢25%).




“Hot split"的测试用例(stacksplit.go).使用-gcflags -l 进行编译


分段的栈:

不分割:1.25925147s

分割:   5.372118558s   <-这里触发了热分割问题(见上文)

连续的栈:

不分割:1.261624848

分割:    1.262939769


Benchmark

我修改了分段栈和连续栈的实现:利用一个环境变量设置栈段的大小/初始大小。我们可以利用这个特性来测试一下栈段大小对benchmark的影响(这些实验中,连续栈的大小是按2的倍数来增长的(加倍)).

econding/json/BenchmarkEncode:这个已经被抱怨过很多次了,请参见bug 3787.


Presumably the max stack use is 19KB or so, and below that bad splits cause the downward spikes.

假设栈最大的使用大小是19KB,在低于这个值时,糟糕的分割会导致性能的下降


html/template/BenchmarkEscapedExecute:这个benchmark有个很特别的问题:当段的大小在4096bytes的时候,


这里有个地方我也不能理解:为什么连续栈的表现会越来越好 ;)



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:abv123456789

查看原文:Go1.3新特性 栈的全新实现—连续栈(4)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4262 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传