Redian新闻
>
怎么把一个Map放到queue里? (转载)
avatar
Y*2
2
可以拔吗???
还有什么感冒药好啊,感冒快两周了都没好全~~~~
avatar
c*e
3
【 以下文字转载自 Notice 讨论区 】
发信人: deliver (自动发信系统), 信区:
标 题: churchance 封 gooddays 在 bagua 版
发信站: BBS 未名空间站自动发信系统 (Fri Sep 23 01:38:12 2011)
【此篇文章是由自动发信系统所张贴】
由于 gooddays 在 bagua 版的 test(仅供测试时使用) 行为,
被暂时取消在本版的发文权力 14 天。
备注:test 你是不是钻风
版主:churchance
Fri Sep 23 01:37:24 2011
avatar
t*s
4
【 以下文字转载自 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好呢?
avatar
x*4
5
based on her credentials, she deserves it...

【在 w**j 的大作中提到】
: 【 以下文字转载自 Dreamer 讨论区 】
: 发信人: Dreamer (不要问我从哪里来), 信区: Dreamer
: 标 题: 泡泡兰回北大了?我也要去北大
: 发信站: BBS 未名空间站 (Mon Nov 16 11:01:56 2009, 美东)
: http://www.phsb.pku.edu.cn/content.asp?id=232

avatar
v*o
6
拔一根长十根
avatar
c*e
7
后来他就没动静了。也不解封自己,也不发贴,也不投诉。
我觉得就是钻风

【在 c********e 的大作中提到】
: 【 以下文字转载自 Notice 讨论区 】
: 发信人: deliver (自动发信系统), 信区:
: 标 题: churchance 封 gooddays 在 bagua 版
: 发信站: BBS 未名空间站自动发信系统 (Fri Sep 23 01:38:12 2011)
: 【此篇文章是由自动发信系统所张贴】
: 由于 gooddays 在 bagua 版的 test(仅供测试时使用) 行为,
: 被暂时取消在本版的发文权力 14 天。
: 备注:test 你是不是钻风
: 版主:churchance
: Fri Sep 23 01:37:24 2011

avatar
d*r
8
如果你要把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了用的.

avatar
S*Y
9
nod. 一群人又把理工科和商科比,以为没paper就肯定比他们有paper差。

【在 x********4 的大作中提到】
: based on her credentials, she deserves it...
avatar
s*8
10
拔头发容易脑膜炎.

【在 Y*****2 的大作中提到】
: 可以拔吗???
: 还有什么感冒药好啊,感冒快两周了都没好全~~~~

avatar
Y*2
11
中。

【在 c********e 的大作中提到】
: 后来他就没动静了。也不解封自己,也不发贴,也不投诉。
: 我觉得就是钻风

avatar
l*s
12
ring buffer, it is very easy to implement
avatar
Y*2
13
。。。。。。。

【在 s**********8 的大作中提到】
: 拔头发容易脑膜炎.
avatar
f*r
14
还能有谁啊
连个包子都没要求过一个

【在 c********e 的大作中提到】
: 后来他就没动静了。也不解封自己,也不发贴,也不投诉。
: 我觉得就是钻风

avatar
t*s
15
ring buffer 不行吧?
我这个collection 不是 fixed sized. 因为在规定的时间内,我不能事先知道这个App
有多少 instances.

【在 l*********s 的大作中提到】
: ring buffer, it is very easy to implement
avatar
m*y
16
她图个啥?

【在 f******r 的大作中提到】
: 还能有谁啊
: 连个包子都没要求过一个

avatar
l*s
17
your purpose is to limit the size of data, right?

App

【在 t**********s 的大作中提到】
: ring buffer 不行吧?
: 我这个collection 不是 fixed sized. 因为在规定的时间内,我不能事先知道这个App
: 有多少 instances.

avatar
c*e
18
讨女神们高兴?

【在 m**y 的大作中提到】
: 她图个啥?
avatar
t*s
19
你是说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就行了.
:
: 间,

avatar
c*e
20
就知道吃。。

【在 f******r 的大作中提到】
: 还能有谁啊
: 连个包子都没要求过一个

avatar
t*s
21
Yes. But I cannot predict the size.

【在 l*********s 的大作中提到】
: your purpose is to limit the size of data, right?
:
: App

avatar
c*e
22
又,那我惹祸了,钻疯要给我小鞋了。

【在 Y*****2 的大作中提到】
: 中。
avatar
d*r
23
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 中去掉?
:
: .

avatar
f*r
24
快送我一个吃

【在 c********e 的大作中提到】
: 就知道吃。。
avatar
d*r
25
如果你只要某时间段所有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

avatar
c*e
26
不好吧。你刚给我,我给你就像TRADE了,我们要避嫌。

【在 f******r 的大作中提到】
: 快送我一个吃
avatar
t*s
27
没懂.
怎么通过 time stamp 找到 RTT的均值?

【在 d******r 的大作中提到】
: 如果你只要某时间段所有host的平均RTT,那更
: 简单:
: ts->Rtt

avatar
f*r
28
...靠! 下次我先避嫌

【在 c********e 的大作中提到】
: 不好吧。你刚给我,我给你就像TRADE了,我们要避嫌。
avatar
d*r
29
你想要啥data?

【在 t**********s 的大作中提到】
: 没懂.
: 怎么通过 time stamp 找到 RTT的均值?

avatar
M*i
30
一大早就爆粗,你注意下
我给你们想个辙,都给我马克,然后我给你们私下转!

【在 f******r 的大作中提到】
: ...靠! 下次我先避嫌
avatar
t*s
31
来自app的所有instances的RTT的均值.

【在 d******r 的大作中提到】
: 你想要啥data?
avatar
f*r
32
你靠的住么?

【在 M**i 的大作中提到】
: 一大早就爆粗,你注意下
: 我给你们想个辙,都给我马克,然后我给你们私下转!

avatar
d*r
33
假如,时间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的均值.
avatar
c*e
34
好办法。
雷锋啊!

【在 M**i 的大作中提到】
: 一大早就爆粗,你注意下
: 我给你们想个辙,都给我马克,然后我给你们私下转!

avatar
t*s
35
每个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

avatar
M*i
36
洗黑钱的收费标准你们懂的吧

你靠的住么?

【在 f******r 的大作中提到】
: 你靠的住么?
avatar
g*g
37
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.
avatar
c*e
38
买一送一?

【在 M**i 的大作中提到】
: 洗黑钱的收费标准你们懂的吧
:
: 你靠的住么?

avatar
d*r
39
就这也要建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.

avatar
M*i
40
一般人收40%,你们都是熟客,我给打个狠折,95折吧,收38%

【在 c********e 的大作中提到】
: 买一送一?
avatar
g*g
41
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,

avatar
c*e
42
吃到了么?

【在 f******r 的大作中提到】
: 你靠的住么?
avatar
d*r
43
谁告诉你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.

avatar
f*r
44
看你就像三八!

【在 M**i 的大作中提到】
: 一般人收40%,你们都是熟客,我给打个狠折,95折吧,收38%
avatar
g*g
45
大多数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

avatar
c*e
46
你是falling吧?这么诡异的算法,又让人觉得很对。

【在 M**i 的大作中提到】
: 一般人收40%,你们都是熟客,我给打个狠折,95折吧,收38%
avatar
d*r
47
常识个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
: 问这个不过分吧?

avatar
M*i
48
对着38就收38。。。对着爷们就收司令。。。欢迎对号入座

看你就像三八!

【在 f******r 的大作中提到】
: 看你就像三八!
avatar
g*g
49
楼主只是谈她要实现的一个辅助功能,到你嘴里就变成唯一功能了,还跟我谈常识。

【在 d******r 的大作中提到】
: 常识个P,你说的商业应用的server。
: 从LZ的贴子看,他就是有个TCP socket,
: 要估计一下RTT而已。
:
: overflow
: app

avatar
M*i
50
别这么侮辱我阿。。黑涩会也有尊严的

【在 c********e 的大作中提到】
: 你是falling吧?这么诡异的算法,又让人觉得很对。
avatar
d*r
51
她只问了这一个问题怎么解决,结果你用
你的常识给她整出了一堆问题。

【在 g*****g 的大作中提到】
: 楼主只是谈她要实现的一个辅助功能,到你嘴里就变成唯一功能了,还跟我谈常识。
avatar
f*r
52
啪!

【在 M**i 的大作中提到】
: 对着38就收38。。。对着爷们就收司令。。。欢迎对号入座
:
: 看你就像三八!

avatar
g*g
53
“我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
个end point读取资料一次.”
你要觉得这个统计是她这个server app的主要功能,我们就没有讨论下去的必要了。
我给的是常识性的解决方案,不是问题。实现起来对熟手也就是一个小时的事情最多了。

【在 d******r 的大作中提到】
: 她只问了这一个问题怎么解决,结果你用
: 你的常识给她整出了一堆问题。

avatar
d*r
54
其实这就是个20分钟的活。。。
这个统计不是她的主要功能也完全不能说明
她这个一定是个大型的商业Server。她甚至都
没说是用Java做的,你就Ehchche都上来了。

问一
了。

【在 g*****g 的大作中提到】
: “我有个Server端应用,每当一个client接入,这个App就生成一个新的instance,并访问一
: 个end point读取资料一次.”
: 你要觉得这个统计是她这个server app的主要功能,我们就没有讨论下去的必要了。
: 我给的是常识性的解决方案,不是问题。实现起来对熟手也就是一个小时的事情最多了。

avatar
g*g
55
DB跟EhCache都不是什么重量级的东西,你也太大惊小怪了。她在java版发帖再转过来,
假定是java写的很自然。

【在 d******r 的大作中提到】
: 其实这就是个20分钟的活。。。
: 这个统计不是她的主要功能也完全不能说明
: 她这个一定是个大型的商业Server。她甚至都
: 没说是用Java做的,你就Ehchche都上来了。
:
: 问一
: 了。

avatar
c*e
56
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.
avatar
g*g
57
光cache,往里加的时候发现超过上限,异步起个线程做清理,还要保证线程安全,20
分钟你就够呛能写完。造轮子的时候总觉得就是个圆,只有造的时候才会发现光材料就
要好几种。

【在 d******r 的大作中提到】
: 其实这就是个20分钟的活。。。
: 这个统计不是她的主要功能也完全不能说明
: 她这个一定是个大型的商业Server。她甚至都
: 没说是用Java做的,你就Ehchche都上来了。
:
: 问一
: 了。

avatar
d*r
58
非要起个线程呀? 把key(ts)放一queue(或linkList).里面,
buffer满了以后,每加一个新的时候就T出去一个key
再删一个map的value不行么?
不会造轮子没关系,但脑筋都不动一下就不好了。
我不明白要是有现成的queue和map的话,二十分钟
写这么几行有啥难的。

20

【在 g*****g 的大作中提到】
: 光cache,往里加的时候发现超过上限,异步起个线程做清理,还要保证线程安全,20
: 分钟你就够呛能写完。造轮子的时候总觉得就是个圆,只有造的时候才会发现光材料就
: 要好几种。

avatar
g*g
59
啥,你连线程安全都没考虑?你不会是觉得server app,由client引发的逻辑,多个读
写可以同时进行的东西,可以不线程安全吧?你自己说的是超过某个内存上限就清理,
不是超过某个数目就清理。你可能发现你要存放的metadata,大小不一,如果你用一个
数字来统计大小,有可能加一个大的entry的时候要删除一堆小的,但凡不是O(1)的算
法,就不想block主线程。这就是为什么要另外起线程的原因。另外,你最少要支持LRU
这样的算法吧,你还
觉得是20分钟的事情吗?
所以说你是造轮子,你还不服。还觉得我没动脑筋,我看是你觉得轮子就是个圆才是真
的。

【在 d******r 的大作中提到】
: 非要起个线程呀? 把key(ts)放一queue(或linkList).里面,
: buffer满了以后,每加一个新的时候就T出去一个key
: 再删一个map的value不行么?
: 不会造轮子没关系,但脑筋都不动一下就不好了。
: 我不明白要是有现成的queue和map的话,二十分钟
: 写这么几行有啥难的。
:
: 20

avatar
d*r
60
我在同一个线程同一个method里面,加一个entry
再删一个(或加n个删n个)如何不安全了? LoL
以LZ现在的data,每个entry的size是一样大,
用内存和数目作上限有啥区别么?动一下脑筋要
死人啊?
人家本来就只需要一轮子,你非卖一汽车底
盘给别人。

【在 g*****g 的大作中提到】
: 啥,你连线程安全都没考虑?你不会是觉得server app,由client引发的逻辑,多个读
: 写可以同时进行的东西,可以不线程安全吧?你自己说的是超过某个内存上限就清理,
: 不是超过某个数目就清理。你可能发现你要存放的metadata,大小不一,如果你用一个
: 数字来统计大小,有可能加一个大的entry的时候要删除一堆小的,但凡不是O(1)的算
: 法,就不想block主线程。这就是为什么要另外起线程的原因。另外,你最少要支持LRU
: 这样的算法吧,你还
: 觉得是20分钟的事情吗?
: 所以说你是造轮子,你还不服。还觉得我没动脑筋,我看是你觉得轮子就是个圆才是真
: 的。

avatar
g*g
61
因为有多个线程在同一个数据结构上进行读写,最少最少你也得来一个
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是一样大,
: 用内存和数目作上限有啥区别么?动一下脑筋要
: 死人啊?
: 人家本来就只需要一轮子,你非卖一汽车底
: 盘给别人。

avatar
d*r
62
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分钟。

avatar
g*g
63
楼主说得很清楚,是server app,client端引发的操作,有多个endpoint,有另外的
server线程需要读这些统计。线程安全是最基本的要求。你给个数据结构,连线程安全
都做不到,还说20分钟够了,我无语。人要轮子,你不能给个木墩凑数吧。

【在 d******r 的大作中提到】
: ts->RTT,
: Lz说她就需要这么个map,其它线程要读
: 需要synchronize那是另一回事, 不用我
: 这个算法也得synchronize。反正我这个
: add,check和delete之间是没啥不安全的。
: LZ要轮子,我就给她一个,就这么回事。
: 你不砍木头,你连轴承底盘都卖给人家。
:
: 展。

avatar
d*r
64
靠,LZ说只要endpoit的平均RTT,这就是一个float而已,
让你搞的这么高深。
你说说看我那个方法究竟如何增加线程的不安全了?
synchroniz是在我那三个步骤外面一层的事。
如果没有delete,只有add,她一样要synchronize.

【在 g*****g 的大作中提到】
: 楼主说得很清楚,是server app,client端引发的操作,有多个endpoint,有另外的
: server线程需要读这些统计。线程安全是最基本的要求。你给个数据结构,连线程安全
: 都做不到,还说20分钟够了,我无语。人要轮子,你不能给个木墩凑数吧。

avatar
g*g
65
看来你没有理解问题的本质在哪里。我提的DB,和EhCache,哪怕ConcurrentHashMap吧
,都是线程安全的。同步不需要在你自己的代码里做,人已经做好了,而且支持高并发
,而不是锁死排队单线程访问。人要轮子,我说1小时够了,你说20分钟能上个木墩,
基本就是
如此。

【在 d******r 的大作中提到】
: 靠,LZ说只要endpoit的平均RTT,这就是一个float而已,
: 让你搞的这么高深。
: 你说说看我那个方法究竟如何增加线程的不安全了?
: synchroniz是在我那三个步骤外面一层的事。
: 如果没有delete,只有add,她一样要synchronize.

avatar
b*i
66
还真得dB。不然,server死机了怎么办?另一个说法,就是要永久化,比如hibernate(
不知道我提这个相关不?)
我自然想到google app engine显然自动就有datastore, memCache,都可以干这个用,
不光死机,万一server起了另一个servlet的实例怎么办?两个不在一个pc,只能通过
datastore来同步。
数据库可以放在另一个服务器上,不一定非得大的,能写磁盘的就行。

【在 d******r 的大作中提到】
: 就这也要建DB,LoL
: 难怪java developer写P大一点东东,动不
: 动就要求4G,6G,。。。的RAM才能跑
: 得顺畅。
:
: a
: specify,

avatar
d*r
67
你用concurrentHashMap 和concrrentQueueList 好了,
不管你自己synch 还是用别人build好的,跟我那个
算法都不茅盾,也没必要另外开线程。
是你自己没明白,我那个方法只要保证每个线程add和delete的
entry是一样多的就行,你用什么方法sync,三个
步骤一起sync还是分开sync都没关系。

【在 g*****g 的大作中提到】
: 看来你没有理解问题的本质在哪里。我提的DB,和EhCache,哪怕ConcurrentHashMap吧
: ,都是线程安全的。同步不需要在你自己的代码里做,人已经做好了,而且支持高并发
: ,而不是锁死排队单线程访问。人要轮子,我说1小时够了,你说20分钟能上个木墩,
: 基本就是
: 如此。

avatar
g*g
68
你怎么保证线程add/delete是一样多的?别的线程过来add/delete同一个entry怎么办?
举个极端的例子,当前为空,你的cache上限是10,100个线程同时过来加同一个entry
,会有什么
结果?
轮子不是那么好造的。

【在 d******r 的大作中提到】
: 你用concurrentHashMap 和concrrentQueueList 好了,
: 不管你自己synch 还是用别人build好的,跟我那个
: 算法都不茅盾,也没必要另外开线程。
: 是你自己没明白,我那个方法只要保证每个线程add和delete的
: entry是一样多的就行,你用什么方法sync,三个
: 步骤一起sync还是分开sync都没关系。

avatar
d*r
69
同一个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
: ,会有什么
: 结果?
: 轮子不是那么好造的。

avatar
b*i
70
如果scale了,另一个servlet启动了,咋办?还是得数据库

【在 d******r 的大作中提到】
: 同一个method 内加一个,删一个,这个可以保证吧。
: LZ的目的是不让buffer无限度增加,不是一定要一个稳定的
: Size,一个data entry 就两个数,handle 几百个线程同写
: 也没多大呀。而且LZ是要保存一定时间内的data。
: 如果一秒内buffer就过上限被删了,你用其它方式也解决
: 不了丢数据的问题。
: 如果这个data只是存比如每5分种所有endpoint
: 的平均值的话,也就是说,RTT的平均值跟endpoint数量
: 有关,但data是每几分钟统计并存一次,你这个问题
: 就根本不存在。

avatar
w*z
71
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都剔除去.

avatar
g*g
72
我的意思是保持cache的上限,超过一不是问题,超过很多长期就可以产生内存泄漏。
光这计数器就有得折腾的,不是你想象的那么简单。

【在 d******r 的大作中提到】
: 同一个method 内加一个,删一个,这个可以保证吧。
: LZ的目的是不让buffer无限度增加,不是一定要一个稳定的
: Size,一个data entry 就两个数,handle 几百个线程同写
: 也没多大呀。而且LZ是要保存一定时间内的data。
: 如果一秒内buffer就过上限被删了,你用其它方式也解决
: 不了丢数据的问题。
: 如果这个data只是存比如每5分种所有endpoint
: 的平均值的话,也就是说,RTT的平均值跟endpoint数量
: 有关,但data是每几分钟统计并存一次,你这个问题
: 就根本不存在。

avatar
d*r
73
还用个P计数器呀, 查QUEQUE的SIZE就可以了.
LZ既然说了她只要一个MAP, 你就要相信她的DATA不会大到瞬间当机的程度.
除非她再给出些其他信息. (要不然用任何IN MEMORY的数据结构都不行的,
因为她要存*一段*时间的DATA).
从她解释的情况看, 她就是有一个LONG->FLOAT的MAP, 每一
段时间存一个ENTRY, 存应该不是多线程的, 但读可能是, 仅此而已.你自己给人家加了
无数假设, 夹一大堆私货.

【在 g*****g 的大作中提到】
: 我的意思是保持cache的上限,超过一不是问题,超过很多长期就可以产生内存泄漏。
: 光这计数器就有得折腾的,不是你想象的那么简单。

avatar
g*g
74
你这完全没有常识,我没法教育你。存都是由client触发的,还不是多线程的。
你爱信啥信啥吧。你反正也不是做后端的。否则你这水平,去面试被秒杀。

【在 d******r 的大作中提到】
: 还用个P计数器呀, 查QUEQUE的SIZE就可以了.
: LZ既然说了她只要一个MAP, 你就要相信她的DATA不会大到瞬间当机的程度.
: 除非她再给出些其他信息. (要不然用任何IN MEMORY的数据结构都不行的,
: 因为她要存*一段*时间的DATA).
: 从她解释的情况看, 她就是有一个LONG->FLOAT的MAP, 每一
: 段时间存一个ENTRY, 存应该不是多线程的, 但读可能是, 仅此而已.你自己给人家加了
: 无数假设, 夹一大堆私货.

avatar
b*s
75
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了用的.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。