终于开始没日没夜加班了,可是笑不出来了。。。啊哈哈哈哈哈哈

大师兄悟空 发布于 2013/11/07 12:47
阅读 816
收藏 0

原来的计划1个礼拜搞定的,可惜今天都周四了这次真的搞不定了。这次的开发不是写写业务逻辑就完事了, 算是一个统计算法,算法没搞过啊,啥数据结构看着能用就用了,结果用的时候出现了一些问题也不好验证算法的正确性。

需求很简单,有很多的请求不停的发送给你,统计这些请求的并发数和TPS(Transaction Per Second) 。

这些请求是通过JMS推送过来的,仔细考虑过JMS消峰平谷的作用,所以统计的时候就需要推迟一个时间段统计上个时间点的数据。

个人思路:外部程序不停的向集合中推送数据,计算程序中需要有一个定时器 ,定时统计上面所说的数据。为了应对在集合中取时间段内数据的操作,是用了TreeSet一个SortedSet的实现去保存数据,而且此Set亦提供了subSet(E fromElement, E toElement)方法获取数据。要做的统计也只是通过subset, remove 之类的操做实现,不涉及遍历统计。同时考虑到是用定时器定时操作这些set统计数据,是用了并发库中ConcurrentSkipListSet解决多线程并发的问题。  

自己统计数据的算法经过讨论理论上是没问题的,但实际上跑出来的数据会有些许误差,而又找 不出问题出现的什么地方。现在主要是因为这些测试数据都是程序临时生成的,除了用这个程序进行统计,没有其他的方法可以从另一方面验证  算法的正确性。

目前感觉自己匮乏的Java技能,一是多线程并发不会用,都是临时抱佛脚。二是Java中的集合除了set,list,map还有很多,例如并发库中的集合。最重要的是要了解其实现原理,这样自己可以客户化适合自己高效率的集合  。

针对统计并发和TPS的算法,大家有没有什么想法?

加载中
0
中山野鬼
中山野鬼

算法和这些具体的工具操作有什么关系?哈。不是没关系。而是前者决定后者的关系。你确定算法首先是抽象的数学问题,随后是工程化问题。但工程化考虑的不是如何实现算法,而是这个数学模型在实际应用中的一些限制。最后做出来的数学模型如果理论验证没问题,才去考虑实际的实现,包括数据的来源的模拟。这和用什么语言或工具集、基出库没什么关系。这些都是设计,而使用具体化工具做出来,这个属于实现。哈。

自己统计数据的算法经过讨论理论上是没问题的”

你的算法不能包含上面那些具体的工具,而是应该包含具体的场景限制。

0
Duziee
Duziee
加了个油
0
小黑屋的懒慢
露珠是个丧心病狂的深井冰
返回顶部
顶部