加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

发布时间:2019-03-16 13:10:00 所属栏目:优化 来源:Jiahonzheng
导读:副标题#e# 在 GitHub 玩耍时,偶然发现了 gopher-lua ,这是一个纯 Golang 实现的 Lua 虚拟机。我们知道 Golang 是静态语言,而 Lua 是动态语言,Golang 的性能和效率各语言中表现得非常不错,但在动态能力上,肯定是无法与 Lua 相比。那么如果我们能够将二

下面给出了 README 提供的实例池实现,但注意到该实现在初始状态时,并未创建足够多的虚拟机实例(初始时,实例数为0),以及存在 slice 的动态扩容问题,这都是值得改进的地方。

  1. type lStatePool struct {  
  2.     m     sync.Mutex  
  3.     saved []*lua.LState  
  4. }  
  5. func (pl *lStatePool) Get() *lua.LState {  
  6.     pl.m.Lock()  
  7.     defer pl.m.Unlock()  
  8.     n := len(pl.saved)  
  9.     if n == 0 {  
  10.         return pl.New()  
  11.     }  
  12.     x := pl.saved[n-1]  
  13.     plpl.saved = pl.saved[0 : n-1]  
  14.     return x  
  15. }  
  16. func (pl *lStatePool) New() *lua.LState {  
  17.     L := lua.NewState()  
  18.     // setting the L up here.  
  19.     // load scripts, set global variables, share channels, etc...  
  20.     return L  
  21. }  
  22. func (pl *lStatePool) Put(L *lua.LState) {  
  23.     pl.m.Lock()  
  24.     defer pl.m.Unlock()  
  25.     pl.saved = append(pl.saved, L)  
  26. }  
  27. func (pl *lStatePool) Shutdown() {  
  28.     for _, L := range pl.saved {  
  29.         L.Close()  
  30.     }  
  31. }  
  32. // Global LState pool  
  33. var luaPool = &lStatePool{  
  34.     saved: make([]*lua.LState, 0, 4),  

模块调用

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读