Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tag的作用和map的实现上面不太理解 #53

Open
owen200008 opened this issue May 3, 2016 · 4 comments
Open

tag的作用和map的实现上面不太理解 #53

owen200008 opened this issue May 3, 2016 · 4 comments

Comments

@owen200008
Copy link

owen200008 commented May 3, 2016

感谢你的建议我也看了你5.3的中文文档,对我这个初学者很有帮助
另外sproto源码我看了然后昨天做了一次改版,里面有几个不太理解
1.tag的作用?除了实现option的功能外,是否还有其他用途?
2.map支持的局限性,是否考虑增加通用类型map?
目前我是改版支持任意类型的map结构不一定依赖于struct,以及里面的key定义(我们的项目中很多定义是 key 到 基础类型 的map)
另外修改lpeg使用C的struct定义,这样我觉得更能表示他和c的关系(其实也是为了偷懒,复制粘贴二进制的协议定义,支持字节对齐1,2,4,8,string,vt和map)
主要了解下map的以后发展,另外如果可以的话是否这样实现的通用类型map是否会有其他问题
encode{
...
if (args->index > 0) {
...
if (args->m_pMapKeyType > 0) {
...
lua_pushvalue(L, self->iter_index);
--根据类型读取key值
lua_pop(L, 1);
}
}
...
}

decode{
...
if (args->index != 0) {
...
if (args->m_pMapKeyType > 0){
//map,先压入key
lua_Integer v = *args->m_pMapKeyValue;
lua_pushinteger(L, v);
}
}
...
if (args->index > 0) {
if (args->m_pMapKeyType > 0)
{
//map
lua_settable(L, self->array_index);
}
else
{
//array
lua_seti(L, self->array_index, args->index);
}
} else {
lua_setfield(L, self->result_index, args->tagname);
}
}
主要是lua这里实现是否会引发其他问题?

@cloudwu
Copy link
Owner

cloudwu commented May 3, 2016

现在能达到描述数据结构的需要,不会改。
如果你不需要数据的 schema, 建议换成无 schema 的协议,例如 json

@owen200008
Copy link
Author

我以前是做金融的,金融传输用FAST协议所以我不太喜欢json这种自描述的,习惯有一份模板就处理数据
另外就是lua的代码还没看所以目前一个问题请教下,我对比了pbc-binding sproto 还有自己写的一套类似pbc-binding的 bitstream 发现性能基本都消耗在 C和lua之间的接口调用上面,sproto实现一次lua调用c执行2000万次调用大概10秒,pbc和我的bitstream调用3次时间就在40s左右,这部分时间有优化的手段吗?或者介绍类似相关的资料给我 谢谢~

@owen200008
Copy link
Author

可能我说的不清楚就是我写了一个测试包 3个段,因此pbc和我的bitstream都调用c 3次-4次,sproto只调用一次encode,发现效率绝大部分都消耗在调用上面,注释掉代码时间大概也就降低到7s,这块大的性能消耗相关资料和优化手段我需要深入研究下,如果有资料介绍给我非常感谢~~~~~

@cloudwu
Copy link
Owner

cloudwu commented May 4, 2016

划分清两个语言的边界是非常重要的。性能应该放在第二位。

所以,应该尽量减少 FFI 调用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants