文档章节

2013年下半年年终总结(下)

zzuGiser
 zzuGiser
发布于 2014/01/21 14:23
字数 1280
阅读 334
收藏 2

        第一件事情,在C++端实现RPCRemote Process Call)远程过程调用,C++端的RPC是模仿Go语言 的RPC实现的,其基础是培升写的多线程模型(也是多进程框架的基础中的基础)。RPC机制是由服务端和客户端组成,在多进程框架中一个基础服务,如DBServiceAEServiceCadService可以看做是服务端,业务服务调用基础服务时作为客户端,界面服务调用业务服务时,业务服务又成了服务端。RPC数据传输格式有多种,可以为XMLJsonGob等,其中Json的数据量比较小,编码性能比较高,目前使用比较广泛,我们也采用Json作为数据传输格式。

        遇到的问题:Json解析的性能问题,函数调用是很频繁的,在常规情况下,2.3GHzCPU1s中能够执行1000 000次加法。经测试,Json解析的消耗是RPC远程调用消耗时间最多的。市场上有很多Json解析库,如JsonKitJsonCPPCJsonLibJson等等,采用的算法大部分为状态机,但是其性能都不是很高,不能满足C++端的RPC调用。因此决定重新实现Json字符串解析。

        这里只从整体上给出解决方案,如有朋友想有更深入的了解的话,可以与我联系,一起探讨学习。

        解析优化方案:Json字符串可以与C++中的结构体一一映射,因为结构体可以套结构体,因此解析的时候每一次取值,只取第一层的,并对其位置建立索引。Json解析过程中,实现0拷贝,大大简化了解析性能。

        编码优化方案:在Json对象内部采用多级缓冲的机制,去存放Json字符串。插入一条键值对时,计算键值对长度,如果第一级可以存放,则在第一级字符串的末尾追加键值对,键与键之间、键与值之间、值与值之间采用0字符分给,同时把键与值位置记录在索引中。删除一个键值对,只要从索引中删除就可以了。修改的话,就先删除索引,再执行插入。从而是解码过程中,实现0次拷贝,优化性能。

        第二件事情,实现转换测试多进程框架,这个是业务的东西,就不多说了。

        第三件事情,测试AE性能(这个叫坑啊,坑死我了),实现动态调图。

        测试AE性能,真是坑人啊,整个公司CAD组也存在将近十几年了,组里面的人大家竟然一口同声的说AE提供的C++ COM接口性能低,让我这个新人深信不疑。让我从其他方向提供SDE接口性能,项目经理明确指出研究SDE Oracle表结构,直接从Oracle表中,获取图层信息,实体信息。大概研究了1个月时间,了解了SDEOracle中存储,以及实体的几何信息存储位置。但是,问题来了,几何的实体字段存储格式是ESRI加密的,非要调用SDE提供的Oracle包才能解析出来。这下麻烦来了,Oracle包是在服务器上执行的,也就是说是由Oracle执行包代码,我们管不了了,想利用多线程,多进程去解析没门,也就是说性能没法提高了。进入了一个死胡同了...

        回过头来重新思考,ESRI的人应该不是吃干饭的,估计是他们使用的问题(因为AE接口是一个资深的元老级人物写的,大家都不愿看他的实现,即使看了,看出问题也没人愿意提出来,这些是中国国情导致的,没办法)。经追溯确实是这样,大不敬了。但是没办法有问题就是有问题,经再三思考下,还是提出来了,重新实现了一套接口,问题解决。

        下面就是动态调图了,在CAD上动态调图其实就是模仿着百度地图、谷歌地图这些Web地图查看器做的。功能上也就是在CAD上拖拽、放大视图时,动态加载地图。

        动态调图的核心思想是按照缩放级别, 对图层建立金字塔。其实说白了就是个四叉树,根据当前的缩放级别,以及位置,确定树的深度和节点索引,从而确定节点。而根据图层建立的四叉树,每个节点上是和若干个图层,以及一个范围绑定的,这样就可以根据范围从绑定的图层上取实体数据了。

        


在这就不详说了,大家有兴趣的话,给我留言。到时候我会根据情况,以及大家感兴趣点,写几篇文章出来,大家一起讨论。




© 著作权归作者所有

共有 人打赏支持
zzuGiser
粉丝 1
博文 4
码字总数 3825
作品 0
郑州
2016我的JFinal年终总结

零、简介 大家好,我是小木,三年连续创业者,国内JFinal框架资深实践者和讲师,全栈程序猿一枚。 一、缘起 与JFinal,我们算是偶遇,但也是必然。 我从08年就注册了开源中国网站会员,比较关...

山东小木
2016/12/23
170
3
致即将逝去的2016 【再出发】

2016年还有最后的2个工作日,也该写写年终总结了,我把2016年的年终总结主题定义为【再出发】。 关于工作 2015年底,由于一些原因,告别一个日活过200W的超级App,移交给别的团队。回想起自己...

hsbirenjie
2016/12/29
0
0
2017 年终总结 | 重要的不是前事不忘, 而是未来可期

date: 2017-9-21 22:10:43 title: 2017 年终总结 | 重要的不是前事不忘, 而是未来可期 这是 「正儿八经」 写年终总结的第 2 年. 我更喜欢另一个说法: 「又到了立 flag 的时候了」. 写这篇年终...

daydaygo
01/03
0
0
2017年终总结,一个不顺心的槛年

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/78866723 2017就这样在不知不觉中又过去了。由于明天大家就都放假了,因此今年的年终总结我只好提前两天发布吧。 这已经...

sinyu890807
2017/12/21
0
0
2014年年终总结

其实2014年的年终总结早该完成了,只是一直没开始写,也觉得没什么可写,希望以后更有目标些。总体来说除了工作外的收获如下,后期在细细的总结: 通过了2门IT认证考试,这个当然是公司自己的...

marvelyu
2015/01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

05-《深度拆解Java虚拟机》之JVM是如何执行方法调用的?(下)

一、问题引入 我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以作者就想在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文...

飞鱼说编程
19分钟前
1
0
nginx统一入口 多服务出口

nginx配置多ip和端口统一调用入口log_format中$upstream_addr 标识打印转发的url地址配置upstream和locationhttp {include mime.types;default_type application/octet-stream...

GoldenVein
20分钟前
1
0
阿里P9架构师谈:高并发网站的监控系统选型、比较、核心监控指标

在高并发分布式环境下,对于访问量大的业务、接口等,需要及时的监控网站的健康程度,防止网站出现访问缓慢,甚至在特殊情况出现应用服务器雪崩等场景,在高并发场景下网站无法正常访问的情况...

我是你大哥
22分钟前
1
0
华为HiAI 助力苏宁易购,让你尽享完美视觉购物体验!

还在感慨商品照片与实物存在差距,又要退货? 还在抱怨被忽视的图片小细节,影响了生活品质? 想要“买买买”, 又担心海量的商品图片耗光你的流量? 就在近期 搭载HiAI能力的苏宁易购新版上线...

华为终端开放实验室
24分钟前
1
0
聊聊redisson的RMap的computeIfAbsent操作

序 本文主要研究一下redisson的RMap的computeIfAbsent操作 实例 @Test public void testRMapComputeIfAbsent(){ Config config = new Config(); config.useSingleS......

go4it
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部