-
Notifications
You must be signed in to change notification settings - Fork 159
Closed
Description
pairs之所以异步 是因为 没办法给table分配一个 所有玩家都一致的 index,
1.32 在每个table创建时 自动分配一个独立的index ,但是因为本地玩家/异步事件 会在异步时机创建table,进而导致之后分配的索引异步,从而失败,
所以问题的本质 就是 每个table 需要一个不受其他位置创建table的影响, 而在自己的位置有自己的计数的一个index
所以我想到的解决方案就是 在创建table时, 根据当前lua堆栈 获取一个索引分配器, 进行递增分配索引
所以 最终结果是 index的类型 由 uint64_t 来完成
uint64_t 高位 4字节 由lua调用堆栈 进行哈希算法 由4字节哈希值完成
uint64_t 低位 4字节 由lua调用堆栈 映射的分配器 进行递增 来完成
这样异步环境下 调用 某个函数 生成的table
跟同步环境下 调用 同一个函数 生成的table 他们之间的 index 都是分别独立 不会互相干扰
这样同步产生的table 作为key 进行遍历 就不会异步了
这个方案唯一的问题就是 获取lua调用堆栈的效率过低, 尤其是 lua5.3之后 debug.traceback的效率 相比5.1下降了10倍 所以差最后这个步骤进行闭环。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels