美文网首页
golang 内存模型

golang 内存模型

作者: 名白 | 来源:发表于2019-01-09 11:34 被阅读0次

1,是什么

是一套规范、内存操作指导
解决多线程编程的 程序的 原子性,有序性,可见性(主要)的问题。
多核操作系统,会存在缓存不一致的情况,说到底是一个同步的问题.

2, 内容

内存模型,除了定义了一套规范,还提供了一系列原语,封装了底层实现后,供开发者直接使用。

go 中:概括 (按照如下规范 使用 channel、sync 等进行同步)
在单独的goroutine中先行发生的顺序即是程序中表达的顺序。

    如果包p引入(import)包q,那么q的init函数的结束先行发生于p的所有init函数开始main.main函数的开始发生在所有init函数结束之后  

    在channel的发送操作先行发生于对应的接收操作完成 
    对channel的关闭先行发生于接收到零值,因为channel已经被关闭了。 
    无缓冲channel的接收先行发生于发送完成 
    在容量为C的channel上的第k个接收先行发生于从这个channel上的第k+C次发送完成。 
    对任意的sync.Mutex或sync.RWMutex变量l和n < m,n次调用l.Unlock()先行发生于m次l.Lock()返回 
    对于sync.RWMutex变量l,任意的函数调用l.RLock满足第n次l.RLock后发生于第n次调用l.Unlock,对应的l.RUnlock先行发生于第n+1次调用l.Lock(此处luck、为写锁)。
    
    通过once.Do(f)执行f()先行发生(指f()返回)于其他的once.Do(f)返回。 

2,参考链接

建议阅读,有助于理解

go: https://segmentfault.com/a/1190000008230146

java :
http://www.hollischuang.com/archives/2509
https://juejin.im/post/5b42c01ee51d45194e0b819a

相关文章

  • golang

    golang携程调度,runtime包 golang内存模型 csp原理 context的原理 slice底层结构...

  • Golang内存模型

    主要内容转自https://zhuanlan.zhihu.com/p/29108170,增加了一些解释及代码示例,...

  • golang 内存模型

    1,是什么 是一套规范、内存操作指导解决多线程编程的 程序的 原子性,有序性,可见性(主要)的问题。多核操作系统,...

  • Golang 1.14中内存分配、清扫和内存回收

    golang内存分配 Golang的内存分配是由golang runtime完成,其内存分配方案借鉴自tcmall...

  • 2018-05-03

    待看知识点:1.pig2.golang携程调度3.golang内存模型4.csp解释5.context的原理6.s...

  • golang并发总结

    golang并发模型 go在语言层面提供了内置的并发支持 不要通过共享内存来通信,而应该通过通信来共享内存 并发与...

  • Flink JobManager | TaskManager内存

    Flink内存模型分析 JobManager内存模型 TaskManager内存模型 内存模型分析 Flink使用...

  • Golang面向并发的内存模型

    面向并发的内存模型 在早期,CPU都是以单核的形式顺序执行机器指令。Go语言的祖先C语言正是这种顺序编程语言的代表...

  • golang如何打印内存内容

    golang如何打印内存内容

  • Channel简易教程

    不同于传统的多线程并发模型使用共享内存来实现线程间通信的方式,golang 的哲学是通过 channel 进行协程...

网友评论

      本文标题:golang 内存模型

      本文链接:https://www.haomeiwen.com/subject/dzmwrqtx.html