由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于古德霸反例的实际测试数据
相关主题
我来写个老魏的详细实现方案。(更新了缺点)我的原帖在这里
goodbug又丢人了说的再清楚一点: 抢票机性能只和中途停靠总站数相关
操!本版连interlocked指令都没有懂的?linux, find command question
做了一个测试为什么我看不懂下面的code,是不是水平还不够?
我来提个方案,大家看合理不合理一道bit operator面试题
哥决定常驻这个版了新手请教:C++ decrement loop
老魏的全国一盘棋[C++] 入门级问题 increment and decrement operators
每秒500万请问C++返回值和返回引用区别
相关话题的讨论汇总
话题: 请求话题: 德霸话题: 反例话题: 处理话题: 次序
进入Programming版参与讨论
1 (共1页)
n**x
发帖数: 606
1
还是那句话,我谁的臭脚也不捧,只是看到这里没有一个人愿意写几行代码测一下。
我提供数据,大家参考一下。 所以不要再说谁捧谁的臭脚了啊。
问题:
古德霸的反例但凡计算机出身的都看得懂。说白了就是在multi-threading的环境下的
顺序问题。
模拟场景:
- 我的机器12 core,我就听大家的用12个线程。
- 每个线程处理1M请求,total 12M的请求平均分布在12个线程上。
- 1000趟车,每趟20个区段,每个区段1000张票。
算法采用老魏的算法,锁区段,不锁线路。 (所谓锁区段也就是interlocked加减)
测试结果(都是平均值)
- 成功出票2M
- 无票可出10M (看完再下结论)
- 抢票过程如果失败Re-Try一次,结果又大约10个请求Re-try成功。
- 全部请求走完后,把所有失败的请求在处理一边,还是没有票。(这个很重要)
结论:
- 古德霸的a->b的反例属于re-try可以成功的例子。 如果retry不成功,那么基本就没
有满足条件的票了。
后续:
性能问题我的场景还不够真实,等我测完后在update.
g*****g
发帖数: 34805
2
你使用了我abc是票贩子刷,占用了99.99%单子的反例没有?没有继续测。

【在 n**x 的大作中提到】
: 还是那句话,我谁的臭脚也不捧,只是看到这里没有一个人愿意写几行代码测一下。
: 我提供数据,大家参考一下。 所以不要再说谁捧谁的臭脚了啊。
: 问题:
: 古德霸的反例但凡计算机出身的都看得懂。说白了就是在multi-threading的环境下的
: 顺序问题。
: 模拟场景:
: - 我的机器12 core,我就听大家的用12个线程。
: - 每个线程处理1M请求,total 12M的请求平均分布在12个线程上。
: - 1000趟车,每趟20个区段,每个区段1000张票。
: 算法采用老魏的算法,锁区段,不锁线路。 (所谓锁区段也就是interlocked加减)

b*******s
发帖数: 5216
3
赞这种态度,好程序猿都这样
n**x
发帖数: 606
4
没看懂。啥意思。
我的测试方法是:每个请求包含三张联程票。每张票区段1到20不等。12M个请求每个都
这样。

【在 g*****g 的大作中提到】
: 你使用了我abc是票贩子刷,占用了99.99%单子的反例没有?没有继续测。
S*A
发帖数: 7142
5
赞,有空可以试试那个补丁的算法,应该就不会有那 10 票漏掉了。
g*****g
发帖数: 34805
6
100张AB,10张BC, 99.99%的订单是ABC, 0.01%是AB, 刷刷看要出错多少次才能把AB的
票都卖掉。
所谓测试,就是要能处理所有的case.

【在 n**x 的大作中提到】
: 没看懂。啥意思。
: 我的测试方法是:每个请求包含三张联程票。每张票区段1到20不等。12M个请求每个都
: 这样。

g*****g
发帖数: 34805
7
你那个补丁,一仍然不能保证公平性。二大大加大了每次操作的开销。几乎是加倍,我
没乱说吧。

【在 S*A 的大作中提到】
: 赞,有空可以试试那个补丁的算法,应该就不会有那 10 票漏掉了。
n**x
发帖数: 606
8
我都一时不知道怎么简化我这个12M的模型。呵呵,明天吧。

【在 g*****g 的大作中提到】
: 100张AB,10张BC, 99.99%的订单是ABC, 0.01%是AB, 刷刷看要出错多少次才能把AB的
: 票都卖掉。
: 所谓测试,就是要能处理所有的case.

n**x
发帖数: 606
9
几百万张票几个农民工买不到票,问题我看不大啊。:)

【在 g*****g 的大作中提到】
: 你那个补丁,一仍然不能保证公平性。二大大加大了每次操作的开销。几乎是加倍,我
: 没乱说吧。

S*A
发帖数: 7142
10
公平性是比较好的保证了,如果有票没有出,是不会停止循环的。
而且落到同一 core 的是有严格先后次序的。
如果是不同 core之间,其实没法严格 measure 并发的时候的次序。
所以 memory update 次序是最接近的了。
开销肯定不是加倍,用这个实验的数据测量应该是没有很大区别。
不信可以试试,看看是不是速度减半,我打赌肯定不是。
好在这个测试我们是可以自己做的,不用牛B网卡和机器。
补充一下,不是加倍是因为那个 automic update 和程序其他的
开销来说是完全忽略不记的。到了机器码这一层我还是比较有信心
的。好在这个实验可以验证,补丁和没有补丁的性能。

【在 g*****g 的大作中提到】
: 你那个补丁,一仍然不能保证公平性。二大大加大了每次操作的开销。几乎是加倍,我
: 没乱说吧。

相关主题
哥决定常驻这个版了我的原帖在这里
老魏的全国一盘棋说的再清楚一点: 抢票机性能只和中途停靠总站数相关
每秒500万linux, find command question
进入Programming版参与讨论
S*A
发帖数: 7142
11
公平性是,不是有几个民工有票买不到,
而是3 张票 5 个民工,是不是严格最先
订的三个买到。仅仅是次序问题。
有票买不到在补丁程序里已经改正了。

【在 n**x 的大作中提到】
: 几百万张票几个农民工买不到票,问题我看不大啊。:)
S*A
发帖数: 7142
12
我还想补充的是,如果你的网卡的中断处理是分在不同 core 上的,
一般APIC 都是这么处理的,那么你在串行处理的时候同样不能严格
保证先后次序的。通常的 Lock 只是保证不重入,不能保证 retry 的
先后次序。所以串行化有同样的次序不严格保证问题。除非单 core
单网卡。那样你用数据库就会有流量不够大的问题。
g*****g
发帖数: 34805
13
你是想说decrement的cost可以忽略不计?你这不是打太监的脸吗?它牛逼哄哄测了半
天的东西,数字show off了半天,原来是个可以忽略不计的东西,那还火力全开光测它
干嘛。

【在 S*A 的大作中提到】
: 公平性是比较好的保证了,如果有票没有出,是不会停止循环的。
: 而且落到同一 core 的是有严格先后次序的。
: 如果是不同 core之间,其实没法严格 measure 并发的时候的次序。
: 所以 memory update 次序是最接近的了。
: 开销肯定不是加倍,用这个实验的数据测量应该是没有很大区别。
: 不信可以试试,看看是不是速度减半,我打赌肯定不是。
: 好在这个测试我们是可以自己做的,不用牛B网卡和机器。
: 补充一下,不是加倍是因为那个 automic update 和程序其他的
: 开销来说是完全忽略不记的。到了机器码这一层我还是比较有信心
: 的。好在这个实验可以验证,补丁和没有补丁的性能。

g*****g
发帖数: 34805
14
反正异步处理,有timestamp, 单线程又如何?

【在 S*A 的大作中提到】
: 我还想补充的是,如果你的网卡的中断处理是分在不同 core 上的,
: 一般APIC 都是这么处理的,那么你在串行处理的时候同样不能严格
: 保证先后次序的。通常的 Lock 只是保证不重入,不能保证 retry 的
: 先后次序。所以串行化有同样的次序不严格保证问题。除非单 core
: 单网卡。那样你用数据库就会有流量不够大的问题。

g*****g
发帖数: 34805
15
再说一遍,这也不是什么牛逼策略。我老人家老早就提过出票策略,票10等分分到10台
服务器上,单子按始发站分多队列。当某种票低于某个threshold, 就distributed
transaction合并票继续处理。在大部分的时间里,多个数据库服务器都可以完全不相
干。太监这个单机策略实在太小儿科了。

【在 S*A 的大作中提到】
: 公平性是比较好的保证了,如果有票没有出,是不会停止循环的。
: 而且落到同一 core 的是有严格先后次序的。
: 如果是不同 core之间,其实没法严格 measure 并发的时候的次序。
: 所以 memory update 次序是最接近的了。
: 开销肯定不是加倍,用这个实验的数据测量应该是没有很大区别。
: 不信可以试试,看看是不是速度减半,我打赌肯定不是。
: 好在这个测试我们是可以自己做的,不用牛B网卡和机器。
: 补充一下,不是加倍是因为那个 automic update 和程序其他的
: 开销来说是完全忽略不记的。到了机器码这一层我还是比较有信心
: 的。好在这个实验可以验证,补丁和没有补丁的性能。

b*******s
发帖数: 5216
16
10台服务器抢票而已,而且更容易由于状态不一致导致不公平,比如某台特别慢

【在 g*****g 的大作中提到】
: 再说一遍,这也不是什么牛逼策略。我老人家老早就提过出票策略,票10等分分到10台
: 服务器上,单子按始发站分多队列。当某种票低于某个threshold, 就distributed
: transaction合并票继续处理。在大部分的时间里,多个数据库服务器都可以完全不相
: 干。太监这个单机策略实在太小儿科了。

b*******s
发帖数: 5216
17
还是老问题了,严格按timestamp来就是阻塞,如果不严格,还不如不用,按进入顺序
排队

【在 g*****g 的大作中提到】
: 反正异步处理,有timestamp, 单线程又如何?
g*****g
发帖数: 34805
18
我同样是只要有票就可以并行,最后特殊处理。

【在 b*******s 的大作中提到】
: 还是老问题了,严格按timestamp来就是阻塞,如果不严格,还不如不用,按进入顺序
: 排队

g*****g
发帖数: 34805
19
不公平个头呀,有票的时候一直出票,到最后没票了就合票。

【在 b*******s 的大作中提到】
: 10台服务器抢票而已,而且更容易由于状态不一致导致不公平,比如某台特别慢
b*******s
发帖数: 5216
20
10台机器跑单线程,我看不出相对一台机器10个核跑10个线程的优越性

【在 g*****g 的大作中提到】
: 我同样是只要有票就可以并行,最后特殊处理。
相关主题
为什么我看不懂下面的code,是不是水平还不够?[C++] 入门级问题 increment and decrement operators
一道bit operator面试题请问C++返回值和返回引用区别
新手请教:C++ decrement loop【C++】请问这样有没有memory leak?多谢
进入Programming版参与讨论
g*****g
发帖数: 34805
21
为什么要跑单线程?

【在 b*******s 的大作中提到】
: 10台机器跑单线程,我看不出相对一台机器10个核跑10个线程的优越性
b*******s
发帖数: 5216
22
我就给个例子吧,某台机器分配到1000个请求
结果这机器坏了
如果要公平,你就要先判断这1000个里面那些已经处理了
这个是必要的,避免回滚
这个不容易,因为机器状态是不正常的,不能保证从那台机器拿,简单方案是在数据库
里要存购票请求有关的信息,需要不少查询
然后把没有处理的要放到比他们迟的另外9台的请求前面,这个简单吗?我看不一定
单机要坏一起坏,反而简单了

【在 g*****g 的大作中提到】
: 不公平个头呀,有票的时候一直出票,到最后没票了就合票。
b*******s
发帖数: 5216
23
好,这个算我理解错,你如果不进行同步,怎么解决超售?

【在 g*****g 的大作中提到】
: 为什么要跑单线程?
d***a
发帖数: 13752
24
手真快,是把好手。
g*****g
发帖数: 34805
25
别忘了你不要求绝对公平我也不用。票都分好了,卖到卖不下去再合票。

【在 b*******s 的大作中提到】
: 好,这个算我理解错,你如果不进行同步,怎么解决超售?
b*******s
发帖数: 5216
26
先不说实时性,你准备怎么合票?比如决定给谁,决定不给谁,短程还是长途优先,没
拿到的怎么重新排队?还有在什么时候合票,哪台机器来合票,合票时是不是阻塞所有
新请求

【在 g*****g 的大作中提到】
: 别忘了你不要求绝对公平我也不用。票都分好了,卖到卖不下去再合票。
S*A
发帖数: 7142
27
我一直说 IO 是比较可能的瓶颈。这个内存的读写还是很快的。

【在 g*****g 的大作中提到】
: 你是想说decrement的cost可以忽略不计?你这不是打太监的脸吗?它牛逼哄哄测了半
: 天的东西,数字show off了半天,原来是个可以忽略不计的东西,那还火力全开光测它
: 干嘛。

S*A
发帖数: 7142
28
你的 time stamp 是如何来的?read_tsc?

【在 g*****g 的大作中提到】
: 反正异步处理,有timestamp, 单线程又如何?
g*****g
发帖数: 34805
29
订单写入Cassandra key是 time based uuid。应用服务器集群产生的。

【在 S*A 的大作中提到】
: 你的 time stamp 是如何来的?read_tsc?
g*****g
发帖数: 34805
30
哈哈,你说的不错,单机IO 5m 我还没见过。

【在 S*A 的大作中提到】
: 我一直说 IO 是比较可能的瓶颈。这个内存的读写还是很快的。
相关主题
老魏,快点做吧,我等烦了goodbug又丢人了
真让老魏讨论需求时候,老魏就开始打滚了操!本版连interlocked指令都没有懂的?
我来写个老魏的详细实现方案。(更新了缺点)做了一个测试
进入Programming版参与讨论
h*****a
发帖数: 1718
31


【在 n**x 的大作中提到】
: 还是那句话,我谁的臭脚也不捧,只是看到这里没有一个人愿意写几行代码测一下。
: 我提供数据,大家参考一下。 所以不要再说谁捧谁的臭脚了啊。
: 问题:
: 古德霸的反例但凡计算机出身的都看得懂。说白了就是在multi-threading的环境下的
: 顺序问题。
: 模拟场景:
: - 我的机器12 core,我就听大家的用12个线程。
: - 每个线程处理1M请求,total 12M的请求平均分布在12个线程上。
: - 1000趟车,每趟20个区段,每个区段1000张票。
: 算法采用老魏的算法,锁区段,不锁线路。 (所谓锁区段也就是interlocked加减)

T********i
发帖数: 2416
32
呵呵。俺现在改用单线程了。性能提高到50M。
还是简单好,俺喜欢简单。

【在 h*****a 的大作中提到】
: 赞
1 (共1页)
进入Programming版参与讨论
相关主题
请问C++返回值和返回引用区别我来提个方案,大家看合理不合理
【C++】请问这样有没有memory leak?多谢哥决定常驻这个版了
老魏,快点做吧,我等烦了老魏的全国一盘棋
真让老魏讨论需求时候,老魏就开始打滚了每秒500万
我来写个老魏的详细实现方案。(更新了缺点)我的原帖在这里
goodbug又丢人了说的再清楚一点: 抢票机性能只和中途停靠总站数相关
操!本版连interlocked指令都没有懂的?linux, find command question
做了一个测试为什么我看不懂下面的code,是不是水平还不够?
相关话题的讨论汇总
话题: 请求话题: 德霸话题: 反例话题: 处理话题: 次序