t**********s 发帖数: 930 | 1 【 以下文字转载自 Java 讨论区 】
发信人: tennisalways (tennisforever), 信区: Java
标 题: 怎么把一个Map放到queue里?
发信站: BBS 未名空间站 (Wed Mar 13 07:09:10 2013, 美东)
我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
个end point读取资料一次.
我现在想对这个round trip time进行统计. 所以我将每次访问end point的时间,和相
对应的RTT生成个Map,放到个queue里,以便查找某个时间段RTT的 min/max/average.
之所以用queue,是因为我不想让数据无限增长.超过时间段就踢出去.Map里的访问时间,
就是用来决定数据是否在时间上已经expire了用的.
另外,可能多个查询程序运行.这会不会造成queue的lock?
我用个什么样的queue好呢? |
d******r 发帖数: 5008 | 2 如果你要把timeout的T出去, 不需要用真正的queue, 一般的queue也不能直接做这个.
用 O(1) hash map, 每个item加个timestamp, 定期检查, T出timeout的item就行了.
间,
【在 t**********s 的大作中提到】 : 【 以下文字转载自 Java 讨论区 】 : 发信人: tennisalways (tennisforever), 信区: Java : 标 题: 怎么把一个Map放到queue里? : 发信站: BBS 未名空间站 (Wed Mar 13 07:09:10 2013, 美东) : 我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一 : 个end point读取资料一次. : 我现在想对这个round trip time进行统计. 所以我将每次访问end point的时间,和相 : 对应的RTT生成个Map,放到个queue里,以便查找某个时间段RTT的 min/max/average. : 之所以用queue,是因为我不想让数据无限增长.超过时间段就踢出去.Map里的访问时间, : 就是用来决定数据是否在时间上已经expire了用的.
|
l*********s 发帖数: 5409 | 3 ring buffer, it is very easy to implement |
t**********s 发帖数: 930 | 4 ring buffer 不行吧?
我这个collection 不是 fixed sized. 因为在规定的时间内,我不能事先知道这个App
有多少 instances.
【在 l*********s 的大作中提到】 : ring buffer, it is very easy to implement
|
l*********s 发帖数: 5409 | 5 your purpose is to limit the size of data, right?
App
【在 t**********s 的大作中提到】 : ring buffer 不行吧? : 我这个collection 不是 fixed sized. 因为在规定的时间内,我不能事先知道这个App : 有多少 instances.
|
t**********s 发帖数: 930 | 6 你是说timestamp是key, RTT是对应的value?
当我每次加入一个新的item, 我用它的time stamp 作标准. 然后iterate 所有的entry
. 所有早过他一定时间的都从hash map 中去掉?
.
【在 d******r 的大作中提到】 : 如果你要把timeout的T出去, 不需要用真正的queue, 一般的queue也不能直接做这个. : 用 O(1) hash map, 每个item加个timestamp, 定期检查, T出timeout的item就行了. : : 间,
|
t**********s 发帖数: 930 | 7 Yes. But I cannot predict the size.
【在 l*********s 的大作中提到】 : your purpose is to limit the size of data, right? : : App
|
d******r 发帖数: 5008 | 8 hash: Client host ->(rtt, ts)
设个时间或memory size的threshold,cleanup.
比如每24小时或size超过5M,iterate 一次,
删掉超时的。
如果是C/C++,用hash in ring buffer 也行,
只稍微麻烦一点点。但效率高些。
entry
【在 t**********s 的大作中提到】 : 你是说timestamp是key, RTT是对应的value? : 当我每次加入一个新的item, 我用它的time stamp 作标准. 然后iterate 所有的entry : . 所有早过他一定时间的都从hash map 中去掉? : : .
|
d******r 发帖数: 5008 | 9 如果你只要某时间段所有host的平均RTT,那更
简单:
ts->Rtt
【在 d******r 的大作中提到】 : hash: Client host ->(rtt, ts) : 设个时间或memory size的threshold,cleanup. : 比如每24小时或size超过5M,iterate 一次, : 删掉超时的。 : 如果是C/C++,用hash in ring buffer 也行, : 只稍微麻烦一点点。但效率高些。 : : entry
|
t**********s 发帖数: 930 | 10 没懂.
怎么通过 time stamp 找到 RTT的均值?
【在 d******r 的大作中提到】 : 如果你只要某时间段所有host的平均RTT,那更 : 简单: : ts->Rtt
|
|
|
d******r 发帖数: 5008 | 11 你想要啥data?
【在 t**********s 的大作中提到】 : 没懂. : 怎么通过 time stamp 找到 RTT的均值?
|
t**********s 发帖数: 930 | 12 来自app的所有instances的RTT的均值.
【在 d******r 的大作中提到】 : 你想要啥data?
|
d******r 发帖数: 5008 | 13 假如,时间ts-delta 到ts的所有RTT平均值为r
用hash map存data
key:ts
Value: r
每24小时clean up 一次,凡ts老于XXX的,从
hash中删了。
如果你的意思是,*每个*instance的平均RTT,then
Key: instance,ts
Value: r
【在 t**********s 的大作中提到】 : 来自app的所有instances的RTT的均值.
|
t**********s 发帖数: 930 | 14 每个instance 只访问end point 一次,取得数据.
所以每个Instance自己没有RTT的均值,因为只有一次访问.
我想要的是不同的Instance所有的不同的RTT的均值.
RTT来自哪个Instance无所谓.
所以hash table里应该只是 ts--->RTT.
每加入一个新entry,就用它 的ts做基准,比它老规定值的entry都剔除去.
【在 d******r 的大作中提到】 : 假如,时间ts-delta 到ts的所有RTT平均值为r : 用hash map存data : key:ts : Value: r : 每24小时clean up 一次,凡ts老于XXX的,从 : hash中删了。 : 如果你的意思是,*每个*instance的平均RTT,then : Key: instance,ts : Value: r
|
g*****g 发帖数: 34805 | 15 You are better served with a DB. Alternatively, if you really want to use a
cache. EhCache is your friend, whatever eviction policy you want to specify,
no need to reinvent the wheel.
As a java programmer, the first question is not how I can implement it,
rather what library has implemented it. |
d******r 发帖数: 5008 | 16 就这也要建DB,LoL
难怪java developer写P大一点东东,动不
动就要求4G,6G,。。。的RAM才能跑
得顺畅。
a
specify,
【在 g*****g 的大作中提到】 : You are better served with a DB. Alternatively, if you really want to use a : cache. EhCache is your friend, whatever eviction policy you want to specify, : no need to reinvent the wheel. : As a java programmer, the first question is not how I can implement it, : rather what library has implemented it.
|
g*****g 发帖数: 34805 | 17 Most server side app use a DB already. An extra table is not an overhead and
it provides tons of flexibility. 8G memory is under $100 nowadays and even
VM can easily give you 16GB. This is a server app, not a mobile phone app. I
couldn't care less how much memory it uses. Plus, your argument is funny, I
don't understand how DB will add extra memory usage compared to memory
cache.
Engineering is about getting the job done with minimal cost. Memory argument
is old.
【在 d******r 的大作中提到】 : 就这也要建DB,LoL : 难怪java developer写P大一点东东,动不 : 动就要求4G,6G,。。。的RAM才能跑 : 得顺畅。 : : a : specify,
|
d******r 发帖数: 5008 | 18 谁告诉你server就有DB的?
跑DB不要memory?
and
even
I
I
【在 g*****g 的大作中提到】 : Most server side app use a DB already. An extra table is not an overhead and : it provides tons of flexibility. 8G memory is under $100 nowadays and even : VM can easily give you 16GB. This is a server app, not a mobile phone app. I : couldn't care less how much memory it uses. Plus, your argument is funny, I : don't understand how DB will add extra memory usage compared to memory : cache. : Engineering is about getting the job done with minimal cost. Memory argument : is old.
|
g*****g 发帖数: 34805 | 19 大多数server app是有DB的,这个叫做常识。就算没有,有现成的cache解决方案,
不但使用soft reference,而且可以设置eviction算法,设置存储上限,可以overflow
到secondary
storage。甚至支持cluster environment。不比你自己建的轮子强100倍。
当你想到一个应用,你就能想到一个结点,100个用户而已,环境一变化又得重写,完
全没有扩展性,你也好意思说?你就跟我说说你这东西怎么支持多结点吧,server app
问这个不过分吧?
【在 d******r 的大作中提到】 : 谁告诉你server就有DB的? : 跑DB不要memory? : : and : even : I : I
|
d******r 发帖数: 5008 | 20 常识个P,你说的商业应用的server。
从LZ的贴子看,他就是有个TCP socket,
要估计一下RTT而已。
overflow
app
【在 g*****g 的大作中提到】 : 大多数server app是有DB的,这个叫做常识。就算没有,有现成的cache解决方案, : 不但使用soft reference,而且可以设置eviction算法,设置存储上限,可以overflow : 到secondary : storage。甚至支持cluster environment。不比你自己建的轮子强100倍。 : 当你想到一个应用,你就能想到一个结点,100个用户而已,环境一变化又得重写,完 : 全没有扩展性,你也好意思说?你就跟我说说你这东西怎么支持多结点吧,server app : 问这个不过分吧?
|
|
|
g*****g 发帖数: 34805 | 21 楼主只是谈她要实现的一个辅助功能,到你嘴里就变成唯一功能了,还跟我谈常识。
【在 d******r 的大作中提到】 : 常识个P,你说的商业应用的server。 : 从LZ的贴子看,他就是有个TCP socket, : 要估计一下RTT而已。 : : overflow : app
|
d******r 发帖数: 5008 | 22 她只问了这一个问题怎么解决,结果你用
你的常识给她整出了一堆问题。
【在 g*****g 的大作中提到】 : 楼主只是谈她要实现的一个辅助功能,到你嘴里就变成唯一功能了,还跟我谈常识。
|
g*****g 发帖数: 34805 | 23 “我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
个end point读取资料一次.”
你要觉得这个统计是她这个server app的主要功能,我们就没有讨论下去的必要了。
我给的是常识性的解决方案,不是问题。实现起来对熟手也就是一个小时的事情最多了。
【在 d******r 的大作中提到】 : 她只问了这一个问题怎么解决,结果你用 : 你的常识给她整出了一堆问题。
|
d******r 发帖数: 5008 | 24 其实这就是个20分钟的活。。。
这个统计不是她的主要功能也完全不能说明
她这个一定是个大型的商业Server。她甚至都
没说是用Java做的,你就Ehchche都上来了。
问一
了。
【在 g*****g 的大作中提到】 : “我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一 : 个end point读取资料一次.” : 你要觉得这个统计是她这个server app的主要功能,我们就没有讨论下去的必要了。 : 我给的是常识性的解决方案,不是问题。实现起来对熟手也就是一个小时的事情最多了。
|
g*****g 发帖数: 34805 | 25 DB跟EhCache都不是什么重量级的东西,你也太大惊小怪了。她在java版发帖再转过来,
假定是java写的很自然。
【在 d******r 的大作中提到】 : 其实这就是个20分钟的活。。。 : 这个统计不是她的主要功能也完全不能说明 : 她这个一定是个大型的商业Server。她甚至都 : 没说是用Java做的,你就Ehchche都上来了。 : : 问一 : 了。
|
c****e 发帖数: 1453 | 26 What you ask is an essential feature of monitoring: counter. So you can put
sample values, see the percentile curve and even build alert from there. It
seems your system is pretty primitive without such infrastructure. I won't
recommend you to write from scratch to build a monitoring system, efficient
logging and leveled aggregation are not trivial.
To have a quick fix, you can create a in-memory datatable and write some
simple code to hardcode your aggregation(min/max/average) and dump them to
file regularly. I noticed this copied from Java board. For datatable, you
can
search JTable or "equivalent to c# datatable in Java".
If you does need read history data a lot, I would recommend you to put it in
a database, which could be as simple as a file db store. It saves your
development time and gives more flexibility. |
g*****g 发帖数: 34805 | 27 光cache,往里加的时候发现超过上限,异步起个线程做清理,还要保证线程安全,20
分钟你就够呛能写完。造轮子的时候总觉得就是个圆,只有造的时候才会发现光材料就
要好几种。
【在 d******r 的大作中提到】 : 其实这就是个20分钟的活。。。 : 这个统计不是她的主要功能也完全不能说明 : 她这个一定是个大型的商业Server。她甚至都 : 没说是用Java做的,你就Ehchche都上来了。 : : 问一 : 了。
|
d******r 发帖数: 5008 | 28 非要起个线程呀? 把key(ts)放一queue(或linkList).里面,
buffer满了以后,每加一个新的时候就T出去一个key
再删一个map的value不行么?
不会造轮子没关系,但脑筋都不动一下就不好了。
我不明白要是有现成的queue和map的话,二十分钟
写这么几行有啥难的。
20
【在 g*****g 的大作中提到】 : 光cache,往里加的时候发现超过上限,异步起个线程做清理,还要保证线程安全,20 : 分钟你就够呛能写完。造轮子的时候总觉得就是个圆,只有造的时候才会发现光材料就 : 要好几种。
|
g*****g 发帖数: 34805 | 29 啥,你连线程安全都没考虑?你不会是觉得server app,由client引发的逻辑,多个读
写可以同时进行的东西,可以不线程安全吧?你自己说的是超过某个内存上限就清理,
不是超过某个数目就清理。你可能发现你要存放的metadata,大小不一,如果你用一个
数字来统计大小,有可能加一个大的entry的时候要删除一堆小的,但凡不是O(1)的算
法,就不想block主线程。这就是为什么要另外起线程的原因。另外,你最少要支持LRU
这样的算法吧,你还
觉得是20分钟的事情吗?
所以说你是造轮子,你还不服。还觉得我没动脑筋,我看是你觉得轮子就是个圆才是真
的。
【在 d******r 的大作中提到】 : 非要起个线程呀? 把key(ts)放一queue(或linkList).里面, : buffer满了以后,每加一个新的时候就T出去一个key : 再删一个map的value不行么? : 不会造轮子没关系,但脑筋都不动一下就不好了。 : 我不明白要是有现成的queue和map的话,二十分钟 : 写这么几行有啥难的。 : : 20
|
d******r 发帖数: 5008 | 30 我在同一个线程同一个method里面,加一个entry
再删一个(或加n个删n个)如何不安全了? LoL
以LZ现在的data,每个entry的size是一样大,
用内存和数目作上限有啥区别么?动一下脑筋要
死人啊?
人家本来就只需要一轮子,你非卖一汽车底
盘给别人。
【在 g*****g 的大作中提到】 : 啥,你连线程安全都没考虑?你不会是觉得server app,由client引发的逻辑,多个读 : 写可以同时进行的东西,可以不线程安全吧?你自己说的是超过某个内存上限就清理, : 不是超过某个数目就清理。你可能发现你要存放的metadata,大小不一,如果你用一个 : 数字来统计大小,有可能加一个大的entry的时候要删除一堆小的,但凡不是O(1)的算 : 法,就不想block主线程。这就是为什么要另外起线程的原因。另外,你最少要支持LRU : 这样的算法吧,你还 : 觉得是20分钟的事情吗? : 所以说你是造轮子,你还不服。还觉得我没动脑筋,我看是你觉得轮子就是个圆才是真 : 的。
|
|
|
g*****g 发帖数: 34805 | 31 因为有多个线程在同一个数据结构上进行读写,最少最少你也得来一个
ConcurrentHashMap吧,Java的HashMap是不线程安全的。C++的std::hash_map也是不线
程安全的。
你怎么知道每个entry的size是一样大的?楼主要统计某个操作的时间,这个操作的时
常跟Endpoint的内容有关,添加一些相关的Metadata进入Entry,是再正常不过的扩展。
这就是咱们的区别,你只看你今天要用到的,20分钟能写完了,有没有bug还两说(线程
安全)。我看到的是几个普通的扩展要求,都不是一个小时或者一天能完成的。轮子是
现成的啥都有,你非要从砍木头
开始。还要说,看,砍个木墩要不了20分钟。
【在 d******r 的大作中提到】 : 我在同一个线程同一个method里面,加一个entry : 再删一个(或加n个删n个)如何不安全了? LoL : 以LZ现在的data,每个entry的size是一样大, : 用内存和数目作上限有啥区别么?动一下脑筋要 : 死人啊? : 人家本来就只需要一轮子,你非卖一汽车底 : 盘给别人。
|
d******r 发帖数: 5008 | 32 ts->RTT,
Lz说她就需要这么个map,其它线程要读
需要synchronize那是另一回事, 不用我
这个算法也得synchronize。反正我这个
add,check和delete之间是没啥不安全的。
LZ要轮子,我就给她一个,就这么回事。
你不砍木头,你连轴承底盘都卖给人家。
展。
【在 g*****g 的大作中提到】 : 因为有多个线程在同一个数据结构上进行读写,最少最少你也得来一个 : ConcurrentHashMap吧,Java的HashMap是不线程安全的。C++的std::hash_map也是不线 : 程安全的。 : 你怎么知道每个entry的size是一样大的?楼主要统计某个操作的时间,这个操作的时 : 常跟Endpoint的内容有关,添加一些相关的Metadata进入Entry,是再正常不过的扩展。 : 这就是咱们的区别,你只看你今天要用到的,20分钟能写完了,有没有bug还两说(线程 : 安全)。我看到的是几个普通的扩展要求,都不是一个小时或者一天能完成的。轮子是 : 现成的啥都有,你非要从砍木头 : 开始。还要说,看,砍个木墩要不了20分钟。
|
g*****g 发帖数: 34805 | 33 楼主说得很清楚,是server app,client端引发的操作,有多个endpoint,有另外的
server线程需要读这些统计。线程安全是最基本的要求。你给个数据结构,连线程安全
都做不到,还说20分钟够了,我无语。人要轮子,你不能给个木墩凑数吧。
【在 d******r 的大作中提到】 : ts->RTT, : Lz说她就需要这么个map,其它线程要读 : 需要synchronize那是另一回事, 不用我 : 这个算法也得synchronize。反正我这个 : add,check和delete之间是没啥不安全的。 : LZ要轮子,我就给她一个,就这么回事。 : 你不砍木头,你连轴承底盘都卖给人家。 : : 展。
|
d******r 发帖数: 5008 | 34 靠,LZ说只要endpoit的平均RTT,这就是一个float而已,
让你搞的这么高深。
你说说看我那个方法究竟如何增加线程的不安全了?
synchroniz是在我那三个步骤外面一层的事。
如果没有delete,只有add,她一样要synchronize.
【在 g*****g 的大作中提到】 : 楼主说得很清楚,是server app,client端引发的操作,有多个endpoint,有另外的 : server线程需要读这些统计。线程安全是最基本的要求。你给个数据结构,连线程安全 : 都做不到,还说20分钟够了,我无语。人要轮子,你不能给个木墩凑数吧。
|
g*****g 发帖数: 34805 | 35 看来你没有理解问题的本质在哪里。我提的DB,和EhCache,哪怕ConcurrentHashMap吧
,都是线程安全的。同步不需要在你自己的代码里做,人已经做好了,而且支持高并发
,而不是锁死排队单线程访问。人要轮子,我说1小时够了,你说20分钟能上个木墩,
基本就是
如此。
【在 d******r 的大作中提到】 : 靠,LZ说只要endpoit的平均RTT,这就是一个float而已, : 让你搞的这么高深。 : 你说说看我那个方法究竟如何增加线程的不安全了? : synchroniz是在我那三个步骤外面一层的事。 : 如果没有delete,只有add,她一样要synchronize.
|
b***i 发帖数: 3043 | 36 还真得dB。不然,server死机了怎么办?另一个说法,就是要永久化,比如hibernate(
不知道我提这个相关不?)
我自然想到google app engine显然自动就有datastore, memCache,都可以干这个用,
不光死机,万一server起了另一个servlet的实例怎么办?两个不在一个pc,只能通过
datastore来同步。
数据库可以放在另一个服务器上,不一定非得大的,能写磁盘的就行。
【在 d******r 的大作中提到】 : 就这也要建DB,LoL : 难怪java developer写P大一点东东,动不 : 动就要求4G,6G,。。。的RAM才能跑 : 得顺畅。 : : a : specify,
|
d******r 发帖数: 5008 | 37 你用concurrentHashMap 和concrrentQueueList 好了,
不管你自己synch 还是用别人build好的,跟我那个
算法都不茅盾,也没必要另外开线程。
是你自己没明白,我那个方法只要保证每个线程add和delete的
entry是一样多的就行,你用什么方法sync,三个
步骤一起sync还是分开sync都没关系。
【在 g*****g 的大作中提到】 : 看来你没有理解问题的本质在哪里。我提的DB,和EhCache,哪怕ConcurrentHashMap吧 : ,都是线程安全的。同步不需要在你自己的代码里做,人已经做好了,而且支持高并发 : ,而不是锁死排队单线程访问。人要轮子,我说1小时够了,你说20分钟能上个木墩, : 基本就是 : 如此。
|
g*****g 发帖数: 34805 | 38 你怎么保证线程add/delete是一样多的?别的线程过来add/delete同一个entry怎么办?
举个极端的例子,当前为空,你的cache上限是10,100个线程同时过来加同一个entry
,会有什么
结果?
轮子不是那么好造的。
【在 d******r 的大作中提到】 : 你用concurrentHashMap 和concrrentQueueList 好了, : 不管你自己synch 还是用别人build好的,跟我那个 : 算法都不茅盾,也没必要另外开线程。 : 是你自己没明白,我那个方法只要保证每个线程add和delete的 : entry是一样多的就行,你用什么方法sync,三个 : 步骤一起sync还是分开sync都没关系。
|
d******r 发帖数: 5008 | 39 同一个method 内加一个,删一个,这个可以保证吧。
LZ的目的是不让buffer无限度增加,不是一定要一个稳定的
Size,一个data entry 就两个数,handle 几百个线程同写
也没多大呀。而且LZ是要保存一定时间内的data。
如果一秒内buffer就过上限被删了,你用其它方式也解决
不了丢数据的问题。
如果这个data只是存比如每5分种所有endpoint
的平均值的话,也就是说,RTT的平均值跟endpoint数量
有关,但data是每几分钟统计并存一次,你这个问题
就根本不存在。
】
办?
entry
【在 g*****g 的大作中提到】 : 你怎么保证线程add/delete是一样多的?别的线程过来add/delete同一个entry怎么办? : 举个极端的例子,当前为空,你的cache上限是10,100个线程同时过来加同一个entry : ,会有什么 : 结果? : 轮子不是那么好造的。
|
b***i 发帖数: 3043 | 40 如果scale了,另一个servlet启动了,咋办?还是得数据库
【在 d******r 的大作中提到】 : 同一个method 内加一个,删一个,这个可以保证吧。 : LZ的目的是不让buffer无限度增加,不是一定要一个稳定的 : Size,一个data entry 就两个数,handle 几百个线程同写 : 也没多大呀。而且LZ是要保存一定时间内的data。 : 如果一秒内buffer就过上限被删了,你用其它方式也解决 : 不了丢数据的问题。 : 如果这个data只是存比如每5分种所有endpoint : 的平均值的话,也就是说,RTT的平均值跟endpoint数量 : 有关,但data是每几分钟统计并存一次,你这个问题 : 就根本不存在。
|
|
|
w**z 发帖数: 8232 | 41 take a look at Yammer metrics easy to use and open source.
间,
【在 t**********s 的大作中提到】 : 每个instance 只访问end point 一次,取得数据. : 所以每个Instance自己没有RTT的均值,因为只有一次访问. : 我想要的是不同的Instance所有的不同的RTT的均值. : RTT来自哪个Instance无所谓. : 所以hash table里应该只是 ts--->RTT. : 每加入一个新entry,就用它 的ts做基准,比它老规定值的entry都剔除去.
|
g*****g 发帖数: 34805 | 42 我的意思是保持cache的上限,超过一不是问题,超过很多长期就可以产生内存泄漏。
光这计数器就有得折腾的,不是你想象的那么简单。
【在 d******r 的大作中提到】 : 同一个method 内加一个,删一个,这个可以保证吧。 : LZ的目的是不让buffer无限度增加,不是一定要一个稳定的 : Size,一个data entry 就两个数,handle 几百个线程同写 : 也没多大呀。而且LZ是要保存一定时间内的data。 : 如果一秒内buffer就过上限被删了,你用其它方式也解决 : 不了丢数据的问题。 : 如果这个data只是存比如每5分种所有endpoint : 的平均值的话,也就是说,RTT的平均值跟endpoint数量 : 有关,但data是每几分钟统计并存一次,你这个问题 : 就根本不存在。
|
d******r 发帖数: 5008 | 43 还用个P计数器呀, 查QUEQUE的SIZE就可以了.
LZ既然说了她只要一个MAP, 你就要相信她的DATA不会大到瞬间当机的程度.
除非她再给出些其他信息. (要不然用任何IN MEMORY的数据结构都不行的,
因为她要存*一段*时间的DATA).
从她解释的情况看, 她就是有一个LONG->FLOAT的MAP, 每一
段时间存一个ENTRY, 存应该不是多线程的, 但读可能是, 仅此而已.你自己给人家加了
无数假设, 夹一大堆私货.
【在 g*****g 的大作中提到】 : 我的意思是保持cache的上限,超过一不是问题,超过很多长期就可以产生内存泄漏。 : 光这计数器就有得折腾的,不是你想象的那么简单。
|
g*****g 发帖数: 34805 | 44 你这完全没有常识,我没法教育你。存都是由client触发的,还不是多线程的。
你爱信啥信啥吧。你反正也不是做后端的。否则你这水平,去面试被秒杀。
【在 d******r 的大作中提到】 : 还用个P计数器呀, 查QUEQUE的SIZE就可以了. : LZ既然说了她只要一个MAP, 你就要相信她的DATA不会大到瞬间当机的程度. : 除非她再给出些其他信息. (要不然用任何IN MEMORY的数据结构都不行的, : 因为她要存*一段*时间的DATA). : 从她解释的情况看, 她就是有一个LONG->FLOAT的MAP, 每一 : 段时间存一个ENTRY, 存应该不是多线程的, 但读可能是, 仅此而已.你自己给人家加了 : 无数假设, 夹一大堆私货.
|
b*******s 发帖数: 5216 | 45 boost::multi_index_container?
间,
【在 t**********s 的大作中提到】 : 【 以下文字转载自 Java 讨论区 】 : 发信人: tennisalways (tennisforever), 信区: Java : 标 题: 怎么把一个Map放到queue里? : 发信站: BBS 未名空间站 (Wed Mar 13 07:09:10 2013, 美东) : 我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一 : 个end point读取资料一次. : 我现在想对这个round trip time进行统计. 所以我将每次访问end point的时间,和相 : 对应的RTT生成个Map,放到个queue里,以便查找某个时间段RTT的 min/max/average. : 之所以用queue,是因为我不想让数据无限增长.超过时间段就踢出去.Map里的访问时间, : 就是用来决定数据是否在时间上已经expire了用的.
|