Lua / FiveM,为什么获取哈希对象很慢?
我通过使用 ESX v1.2 构建 FiveM 角色扮演服务器来介绍 Lua。 代码中存在许多低效性,并且我已经孤立了大部分问题,这些问题会在服务器中导致“服务器线程阻塞”,但有一件事让我有些困惑。
有一个“扩展玩家”对象,它包含了从各种数据库调用中汇总的许多 RP 特定信息,通常称为 xPlayer。 每个玩家都有一个服务器 ID,它是一个数字,并且有一个名为 ESX.Players 的 Lua 表,xPlayer 存储为使用哈希的格式 ESX.Players [source] = xPlayer
有一个功能:
ESX.GetPlayerFromId = function(source)
return ESX.Players [tonumber(source)]
end
这个函数包装了使用哈希值进行获取的过程,这是我们在其中经常遇到服务器线程阻塞的地方。在调用代码中,我已经删除了所有处理逻辑,只留下了这个函数调用,并且问题仍然存在,而且注释掉它,问题便消失了。问题是为什么,既然它只是从哈希表中获取,那么由于哈希表中的东西已经是实例化的表,并且在该过程中不会达到任何 IO 或执行任何繁琐的操作,为什么会造成延迟呢?它只是一个存储的实例。
唯一引起我的关注的是,在 xPlayer 表中有一些值,然后是许多功能。 Lua 表中这些函数的重量足以减慢返回对其的引用吗?此文件显示扩展玩家表在哪里创建并返回 https://github.com/esx-framework/es_extended/blob/v1-final/server/classes/player.lua
我正在将所有这些函数推送到专用实用程序表上,该表将存在一次,每个函数都会获取 xPlayer 参数以由该函数进行处理。 100 多个 FiveM 资源中有数千个调用返回到 xPlayer。() 调用,因此代码扭矩和回归测试的重量非常大,因此目前代码库尚未处于发布到生产服务器以测试 40 多个玩家的状态。任何人都可以确认我是否在正确的轨道上,如果将 xPlayer 表的函数移除,是否有可能在通过哈希键检索时提供性能提升?如果有,为什么呢?
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
