设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

当Go遇上了Lua,会发生什么(2)

发布时间:2019-03-15 00:51 所属栏目:21 来源:Jiahonzheng
导读:因为新建一个 Lua 虚拟机会涉及到大量的内存分配操作,如果采用每次运行都重新创建和销毁的方式的话,将消耗大量的资源。引入虚拟机实例池,能够复用虚拟机,减少不必要的开销。 funcBenchmarkRunWithoutPool(b*tes

因为新建一个 Lua 虚拟机会涉及到大量的内存分配操作,如果采用每次运行都重新创建和销毁的方式的话,将消耗大量的资源。引入虚拟机实例池,能够复用虚拟机,减少不必要的开销。

  1. func BenchmarkRunWithoutPool(b *testing.B) {  
  2.     for i := 0; i < b.N; i++ {  
  3.         l := lua.NewState()  
  4.         _ = l.DoString(`a = 1 + 1`)  
  5.         l.Close()  
  6.     }  
  7. }  
  8. func BenchmarkRunWithPool(b *testing.B) {  
  9.     pool := newVMPool(nil, 100)  
  10.     for i := 0; i < b.N; i++ {  
  11.         l := pool.get()  
  12.         _ = l.DoString(`a = 1 + 1`)  
  13.         pool.put(l)  
  14.     }  
  15. }  
  16. // goos: darwin  
  17. // goarch: amd64  
  18. // pkg: glua  
  19. // BenchmarkRunWithoutPool-8          10000            129557 ns/op          262599 B/op        826 allocs/op  
  20. // BenchmarkRunWithPool-8            100000             19320 ns/op           85626 B/op         67 allocs/op  
  21. // PASS  
  22. // ok      glua    3.467s 

Benchmark 结果显示,虚拟机实例池的确能够减少很多内存分配操作。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读