Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

内存模型 #43

Open
Petelin opened this issue Nov 3, 2019 · 0 comments
Open

内存模型 #43

Petelin opened this issue Nov 3, 2019 · 0 comments
Assignees

Comments

@Petelin
Copy link
Owner

Petelin commented Nov 3, 2019

内存模型

In computing, a memory model describes the interactions of threads through memory and their shared use of the data.

用来描述内存之间是怎么share的.

go

对于go来说, share内存一定是在多个goroutine之间. 两个goroutine同是对一个变量,数据结构进行操作就会有并发问题,为了解决这个问题go定义了happen-before语义,说明了几种可以保证顺序的写法 可以看文章

这里面讲了锁,channel,goroutine,以及一些常用的编程工具,比如wait group这个东西其实就是多线程里的join. -- 这些东西在go语言里的语义

atomic

go 的atomic语义很弱, 文档介绍是说对底层cpu提供的指令的封装, 如果不是很有必要请不要使用

因为用atomic只能保证一个值被原子的读写. 文档里 没有将是否会阻止乱排序, 也没有happen before语义.把他用作控制多个goroutine对一个值的读写不会有data race是可以的. 其他的操作还是要用上面的更高层的东西.

Java

Java里面有很多种锁, 我在查atomic的时候最关心的就是volition这种锁. 因为他的用法很像atomic包, 都是避免对同一个数据的读写产生的data race. 但是volition还有happen before语言的, 他会加内存屏障. 根绝是读是写, 后面前面对这个变量是是读是写, 加的屏障还很不一样.非常的复杂.

@Petelin Petelin self-assigned this Nov 3, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant