文档章节

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

zzuGiser
 zzuGiser
发布于 2014/01/21 14:23
字数 1280
阅读 335
收藏 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
粉丝 0
博文 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
2018/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

没有更多内容

加载失败,请刷新页面

加载更多

嵌入式应用选择合适的微控制器

为嵌入式应用选择微控制器有几个原因,即低成本,高集成度,增加可靠性,节省空间等。 准备所需硬件接口列表使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微...

linux-tao
41分钟前
4
0

中国龙-扬科
今天
2
0
使用apicloud开发移动端APP,IOS list页面滚动卡顿解决记录

给内容容器添加样式:-webkit-overflow-scrolling:touch; -webkit-overflow-scrolling:属性控制元素在移动设备上是否使用滚动回弹效果. auto:使用普通滚动, 当手指从触摸屏上移开,滚动会立即...

万建宁
今天
1
0
Akka消息传送可靠性 23

原文:https://doc.akka.io/docs/akka/2.5/general/message-delivery-reliability.html Akka可帮助您构建可靠的应用程序,这些应用程序在一台计算机中使用多个处理器核心或分布在计算机网络中...

woshixin
今天
3
0
composer安装

前言:随着开源的东西越来越多,一些好的代码我们是可以直接拿过来用的,github更是加快了这一节奏,在github上我们可以看到一些开源的项目、代码块、函数库、类结构等,我们可以直接Fork,然...

echojson
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部