由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - lock-free data structures
相关主题
请教一个C++的考题c++posix多线程问题请教
请教一个系统设计问题a algo design question
问一下STL里的queue, and stack 遍历的问题 (转载)是不是题出错了?
两个线程异步通信是不是用信号最好?这样的deadlock如何debug?
怎么把一个Map放到queue里? (转载)server端用Threadpool实现request/response的两种不同方法比较
拿C*当message queue用,不知道哪里面试能通过how to know the contents in Message queue?
老魏,你的message queue的概念是十年前j2ee的概念面向对象编程
拿Cassandra当MQ用,证明你连Cassandra也不懂最新的MS面试题 (转载)
相关话题的讨论汇总
话题: lock话题: free话题: structures话题: 线程
进入Programming版参与讨论
1 (共1页)
b*******s
发帖数: 5216
W***o
发帖数: 6519
2
这帖子太长了,粗看了一下。还是通过提问讨论学习一下吧。
有几个问题:
1. 如果几个processes要access shared data structure, 怎么避免race ?
2. 一个 process 对 common data structure 操作结束,怎么通知下一个 process? 按
照什么顺序?
3. 最后一个 process 处理完 common data structure, 怎么告诉其他 processes to
move
on ?

【在 b*******s 的大作中提到】
: http://kukuruku.co/hub/cpp/lock-free-data-structures-the-inside
t****t
发帖数: 6806
3
1. usually lock-free structures use atomic operations and (possibly) retry t
o guarantee race-free conditions without lock. how? read the article. are yo
u waiting others to spoon feed you...?
2. there is no lock so there is no notification. while one thread gain acces
s, the others just keep retrying.
3. since it's the last process, usually the other process already move on. i
guess you are thinking about barrier...


to

【在 W***o 的大作中提到】
: 这帖子太长了,粗看了一下。还是通过提问讨论学习一下吧。
: 有几个问题:
: 1. 如果几个processes要access shared data structure, 怎么避免race ?
: 2. 一个 process 对 common data structure 操作结束,怎么通知下一个 process? 按
: 照什么顺序?
: 3. 最后一个 process 处理完 common data structure, 怎么告诉其他 processes to
: move
: on ?

t****t
发帖数: 6806
4
你还不如看看c++ concurrency in action那本书. 写得不错.

【在 b*******s 的大作中提到】
: http://kukuruku.co/hub/cpp/lock-free-data-structures-the-inside
W***o
发帖数: 6519
5
谢谢,你说的第二点有点像busy waiting/spinning; 如果是一个分布式系统,这样快
有很高的 network communication overhead 吧
今天晚上没心情静下心来读,明天白天有空再详细读一下;
PS,如果这个idea很有创新,原作者应该会投给期刊发表出来了吧?呵呵

t
yo
acces
i

【在 t****t 的大作中提到】
: 1. usually lock-free structures use atomic operations and (possibly) retry t
: o guarantee race-free conditions without lock. how? read the article. are yo
: u waiting others to spoon feed you...?
: 2. there is no lock so there is no notification. while one thread gain acces
: s, the others just keep retrying.
: 3. since it's the last process, usually the other process already move on. i
: guess you are thinking about barrier...
:
: 按
: to

t****t
发帖数: 6806
6
yes, busy waiting is essential for lock-free structures. no one says busy wa
iting should be used everywhere though.
and of course the idea is not new. in fact, every lock is internally impleme
nted with some kind of lock-free structures, using atomic operations. ultima
tely hardware guarantees an operation is atomic.

【在 W***o 的大作中提到】
: 谢谢,你说的第二点有点像busy waiting/spinning; 如果是一个分布式系统,这样快
: 有很高的 network communication overhead 吧
: 今天晚上没心情静下心来读,明天白天有空再详细读一下;
: PS,如果这个idea很有创新,原作者应该会投给期刊发表出来了吧?呵呵
:
: t
: yo
: acces
: i

g*********e
发帖数: 14401
7
test and set指令
b*******s
发帖数: 5216
8
多谢,看过了

【在 t****t 的大作中提到】
: 你还不如看看c++ concurrency in action那本书. 写得不错.
w***g
发帖数: 5958
9
这种东西学术界折腾有几年了。Lock在性能上其实没那么不济。Lock free主要还是为
了程序写起来方便,性能上可能还不如lock。

【在 b*******s 的大作中提到】
: http://kukuruku.co/hub/cpp/lock-free-data-structures-the-inside
t****t
发帖数: 6806
10
程序写起来都一样, lock free和locked不能互相替代, 是两个不同情况用的东西.

【在 w***g 的大作中提到】
: 这种东西学术界折腾有几年了。Lock在性能上其实没那么不济。Lock free主要还是为
: 了程序写起来方便,性能上可能还不如lock。

相关主题
拿C*当message queue用,不知道哪里面试能通过c++posix多线程问题请教
老魏,你的message queue的概念是十年前j2ee的概念a algo design question
拿Cassandra当MQ用,证明你连Cassandra也不懂是不是题出错了?
进入Programming版参与讨论
b****s
发帖数: 872
11
写起来不一样。
如果共享的就是个计数器,不用lock free,还用lock就太傻了。可惜大部分人根本不
知道lock free,一个计数器还在用lock

【在 t****t 的大作中提到】
: 程序写起来都一样, lock free和locked不能互相替代, 是两个不同情况用的东西.
t****t
发帖数: 6806
12
计数器这种trivial的情况不谈, 大多数lock-free的结构如果不用跟锁看起来一样的
spin, 那写起来肯定比带锁的麻烦. 我说的一样是指几个可能的操作都是预先设计好,
写一次就搞定的意思.

【在 b****s 的大作中提到】
: 写起来不一样。
: 如果共享的就是个计数器,不用lock free,还用lock就太傻了。可惜大部分人根本不
: 知道lock free,一个计数器还在用lock

b****s
发帖数: 872
13
为了追求高性能,麻烦还是有必要的。
程序拿不到锁,会进入睡眠状态,导致context switch,这个开销很大。用lock-free
就灵活多了

,

【在 t****t 的大作中提到】
: 计数器这种trivial的情况不谈, 大多数lock-free的结构如果不用跟锁看起来一样的
: spin, 那写起来肯定比带锁的麻烦. 我说的一样是指几个可能的操作都是预先设计好,
: 写一次就搞定的意思.

b*******s
发帖数: 5216
14
不是新点子,很多人实现过

【在 W***o 的大作中提到】
: 谢谢,你说的第二点有点像busy waiting/spinning; 如果是一个分布式系统,这样快
: 有很高的 network communication overhead 吧
: 今天晚上没心情静下心来读,明天白天有空再详细读一下;
: PS,如果这个idea很有创新,原作者应该会投给期刊发表出来了吧?呵呵
:
: t
: yo
: acces
: i

b*******s
发帖数: 5216
15
看情况,单个任务很短暂,但任务切换很频繁数量很大的情况,lock-free不错

【在 w***g 的大作中提到】
: 这种东西学术界折腾有几年了。Lock在性能上其实没那么不济。Lock free主要还是为
: 了程序写起来方便,性能上可能还不如lock。

b*******s
发帖数: 5216
16
很多都是,比如quickfix engine就是
新的c++类库都自带atomic_flag这种test n set的spin lock

【在 b****s 的大作中提到】
: 写起来不一样。
: 如果共享的就是个计数器,不用lock free,还用lock就太傻了。可惜大部分人根本不
: 知道lock free,一个计数器还在用lock

n******t
发帖数: 4406
17
lock-free 和高性能没有任何必然联系。觉得性能不好改用lock-free这是很多人的误
区。

free

【在 b****s 的大作中提到】
: 为了追求高性能,麻烦还是有必要的。
: 程序拿不到锁,会进入睡眠状态,导致context switch,这个开销很大。用lock-free
: 就灵活多了
:
: ,

F****n
发帖数: 3271
18
lock-free reduces the chance of human-caused performance problem

【在 n******t 的大作中提到】
: lock-free 和高性能没有任何必然联系。觉得性能不好改用lock-free这是很多人的误
: 区。
:
: free

b****s
发帖数: 872
19
简单的性能例子,一个共享计数器更新,两个线程同时访问更新,数据更新不能冲突。
在1分钟之内,是用lock free更新的总次数多,还是用lock更新的总次数多。

【在 n******t 的大作中提到】
: lock-free 和高性能没有任何必然联系。觉得性能不好改用lock-free这是很多人的误
: 区。
:
: free

b*******s
发帖数: 5216
20
这个例子是有偏颇的,比如你有个线程忙得很,要很长时间才clear spin lock,这时
lock free就可能降低效率,因为所有在等的线程都在瞎忙,如果数量一大,就开销很
大了

【在 b****s 的大作中提到】
: 简单的性能例子,一个共享计数器更新,两个线程同时访问更新,数据更新不能冲突。
: 在1分钟之内,是用lock free更新的总次数多,还是用lock更新的总次数多。

相关主题
这样的deadlock如何debug?面向对象编程
server端用Threadpool实现request/response的两种不同方法比较最新的MS面试题 (转载)
how to know the contents in Message queue?再次请教关于AIX中线程以及优先级的问题
进入Programming版参与讨论
b****s
发帖数: 872
21
所以看使用场合,lock free还是很有用的。传统的锁,拿不到会导致线程睡眠。
如果有1000个线程,同时有一个紧俏资源,大家都要用,但你不希望线程睡眠在这个锁
上,导致大量上下文切换,lock free就有用了。

【在 b*******s 的大作中提到】
: 这个例子是有偏颇的,比如你有个线程忙得很,要很长时间才clear spin lock,这时
: lock free就可能降低效率,因为所有在等的线程都在瞎忙,如果数量一大,就开销很
: 大了

s********k
发帖数: 6180
22
看在什么平台上面吧,你说的这种在mobile上最优选择吧,不停地spin lock的话反而
功耗上没法承受

free

【在 b****s 的大作中提到】
: 为了追求高性能,麻烦还是有必要的。
: 程序拿不到锁,会进入睡眠状态,导致context switch,这个开销很大。用lock-free
: 就灵活多了
:
: ,

b****s
发帖数: 872
23
spin lock可以很快的,要看场合。
假设一个FIFO的queue的场合,一个线程读queue头内容,然后立刻释放锁,1000个线程
添加内容到queue尾,每个线程加入queue尾内容,然后立刻释放锁。queue的读和写操
作速度很快,一个线程就算一下抢不到,只要等一小会就能抢到。
但如果出现冲突,用传统锁,导致的线程切换,开销肯定大约spin lock

【在 s********k 的大作中提到】
: 看在什么平台上面吧,你说的这种在mobile上最优选择吧,不停地spin lock的话反而
: 功耗上没法承受
:
: free

n******t
发帖数: 4406
24
实际程序几乎没你这么写的。。。
没事共享计数器干什么???

【在 b****s 的大作中提到】
: 简单的性能例子,一个共享计数器更新,两个线程同时访问更新,数据更新不能冲突。
: 在1分钟之内,是用lock free更新的总次数多,还是用lock更新的总次数多。

p*u
发帖数: 2454
25

lock-free queues are very important, esp multiple-producer-single-consumer
and single-producer-single-consumer queues...

【在 n******t 的大作中提到】
: 实际程序几乎没你这么写的。。。
: 没事共享计数器干什么???

b*******s
发帖数: 5216
26
1000个threads就算你用lock free,也一样可能会有context switch的

【在 b****s 的大作中提到】
: 所以看使用场合,lock free还是很有用的。传统的锁,拿不到会导致线程睡眠。
: 如果有1000个线程,同时有一个紧俏资源,大家都要用,但你不希望线程睡眠在这个锁
: 上,导致大量上下文切换,lock free就有用了。

k**********g
发帖数: 989
27
昏特。
本质上就是根据各任务的时间性,选择适当的保护方案。
Inefficiency = (average time per operation including lock overhead) divided
by (average time per operation excluding lock overhead) minus 1.0
The numerator is the actual performance. The divisor is the time spent "
doing useful stuff".
Ideally inefficiency = 0, i.e. zero overhead. In practice, make inefficiency
small.
Corollary: If the task takes longer time, it's okay to use lock with larger
overhead per-operation, because the inefficiency won't increase much.
nano-scale : lock-free, together with immutable/copyable types.
micro-scale : OS locks.
milli-scale : DB transactions
second-scale : need to show something to the user e.g. sandglass or spinning
beachball
b*******s
发帖数: 5216
28
总结得不错

divided
inefficiency
larger

【在 k**********g 的大作中提到】
: 昏特。
: 本质上就是根据各任务的时间性,选择适当的保护方案。
: Inefficiency = (average time per operation including lock overhead) divided
: by (average time per operation excluding lock overhead) minus 1.0
: The numerator is the actual performance. The divisor is the time spent "
: doing useful stuff".
: Ideally inefficiency = 0, i.e. zero overhead. In practice, make inefficiency
: small.
: Corollary: If the task takes longer time, it's okay to use lock with larger
: overhead per-operation, because the inefficiency won't increase much.

n******t
发帖数: 4406
29
you apparently used very little MPSC queues in real life, at least in
performance critical settings.
One thing I think you probably do not know is, lock-free algos typically
make things slower, do you know why?

【在 p*u 的大作中提到】
:
: lock-free queues are very important, esp multiple-producer-single-consumer
: and single-producer-single-consumer queues...

c*****4
发帖数: 1777
30
晕死。打酱油地弱弱的问一句,搞清楚茴香豆的茴字有多少种写法真能赚到钱么?有多
少职务是要自己实现同步的。

【在 b*******s 的大作中提到】
: http://kukuruku.co/hub/cpp/lock-free-data-structures-the-inside
相关主题
Unix Multi-processor Programming请教一个系统设计问题
拜托推荐多线程和socket的书问一下STL里的queue, and stack 遍历的问题 (转载)
请教一个C++的考题两个线程异步通信是不是用信号最好?
进入Programming版参与讨论
p*u
发帖数: 2454
31

yes, that's because ur co-workers or urself are incompetent.

【在 n******t 的大作中提到】
: you apparently used very little MPSC queues in real life, at least in
: performance critical settings.
: One thing I think you probably do not know is, lock-free algos typically
: make things slower, do you know why?

b*******s
发帖数: 5216
32
如果你用不到,忽略好了

【在 c*****4 的大作中提到】
: 晕死。打酱油地弱弱的问一句,搞清楚茴香豆的茴字有多少种写法真能赚到钱么?有多
: 少职务是要自己实现同步的。

n******t
发帖数: 4406
33
man, let's be techinical and say some real stuff. typing some shit like a
randominternet dude makes yourself a random internet dude.

【在 p*u 的大作中提到】
:
: yes, that's because ur co-workers or urself are incompetent.

w***w
发帖数: 84
34
1000个线程都不睡 那不得1000个core啊 这个lock free应该是在low contention,
short critical session 时有用吧 并且数据结构得够简单 update 得isolated. CAS
又是个hack 总之是费力不讨好 多年前听过 现在还有人做吗?
j********x
发帖数: 2330
35
扯淡。。。

【在 n******t 的大作中提到】
: you apparently used very little MPSC queues in real life, at least in
: performance critical settings.
: One thing I think you probably do not know is, lock-free algos typically
: make things slower, do you know why?

j********x
发帖数: 2330
36
lock-free vs lock肯定是前者快,当然前提是不做大的架构变化。

【在 n******t 的大作中提到】
: you apparently used very little MPSC queues in real life, at least in
: performance critical settings.
: One thing I think you probably do not know is, lock-free algos typically
: make things slower, do you know why?

n******t
发帖数: 4406
37
同学你这么肯定,你家里人知道么?
还架构变化,一看就是连lock-free定义都没搞清楚的,更不要说做过"重大架构变化了
"。

【在 j********x 的大作中提到】
: lock-free vs lock肯定是前者快,当然前提是不做大的架构变化。
o*******0
发帖数: 699
38
学习了
1 (共1页)
进入Programming版参与讨论
相关主题
最新的MS面试题 (转载)怎么把一个Map放到queue里? (转载)
再次请教关于AIX中线程以及优先级的问题拿C*当message queue用,不知道哪里面试能通过
Unix Multi-processor Programming老魏,你的message queue的概念是十年前j2ee的概念
拜托推荐多线程和socket的书拿Cassandra当MQ用,证明你连Cassandra也不懂
请教一个C++的考题c++posix多线程问题请教
请教一个系统设计问题a algo design question
问一下STL里的queue, and stack 遍历的问题 (转载)是不是题出错了?
两个线程异步通信是不是用信号最好?这样的deadlock如何debug?
相关话题的讨论汇总
话题: lock话题: free话题: structures话题: 线程