文章分类 -  Golang

这份笔记是自学`Golang`时的资料总结
摘要:一 原子操作理解 对并发的操作,可以利用Go新提出的管道思想,大多数语言都有的锁思想,也可以使用最基础的原子操作。 原子操作的执行过程不能被中断,因为此时CPU不会去执行其他对该值进行的操作。 Go语言提供的原子操作是非侵入式的,由标准库代码包sync/atomic提供了一系列原子操作函数。这些函数 阅读全文
posted @ 2020-06-13 16:41 cool2feel 阅读(459) 评论(0) 推荐(0)
摘要:一 Once 只执行一次 sync包提供了互斥锁、读写锁、条件变量等常见并发场景需要的API。sync还有一些其他API,如结构体:sync.Once,负责只执行一次,也即全局唯一操作。 使用方式如下: var once sync.Once once.Do(func(){}) // Do方法的有效调 阅读全文
posted @ 2020-06-13 16:40 cool2feel 阅读(314) 评论(0) 推荐(0)
摘要:一 条件变量 sync.Cond类型即是Go中的条件变量,该类型内部包含一个锁接口。条件变量通常与锁配合使用: 创建条件变量的函数: func NewCond(l locker) *Cond // 条件变量必须传入一个锁,二者需要配合使用 *sync.Cond类型有三个方法: Wait: 该方法会阻 阅读全文
posted @ 2020-06-13 16:37 cool2feel 阅读(217) 评论(0) 推荐(0)
摘要:一 等待组 sync.WaitGroup sync.WaitGroup类型的值也是并发安全的,该类型结构体中内内部拥有一个计数器,计数器的值可以通过方法调用实现计数器的增加和减少 。 当我们添加了 N 个并发任务进行工作时,就将等待组的计数器值增加 N。每个任务完成时,这个值减1。 同时,在另外一个 阅读全文
posted @ 2020-06-13 16:34 cool2feel 阅读(109) 评论(0) 推荐(0)
摘要:一 并发解决方案 Go程序可以使用通道进行多个goroutine间的数据交换,但是这仅仅是数据同步中的一种方法。Go语言与其他语言如C、Java一样,也提供了同步机制,在某些轻量级的场合,原子访问(sync/atomic包),互斥锁(sync.Mutex)以及等待组(sync.WaitGroup)能 阅读全文
posted @ 2020-06-13 15:55 cool2feel 阅读(143) 评论(0) 推荐(0)
摘要:一 调度器的调度 1.0 调度器概述 Go线程模型中一部分调度任务由操作系统内核之外的程序承担,即调度器。其调度对象是M、P、G的实例。 每个M在运行过程中的偶会按需执行一些调度任务。 MPG模式运行状态: 1.1 一轮调度 go程序初始化完毕后,调度器会进行一轮调度(位于runtime中的sche 阅读全文
posted @ 2020-06-13 15:52 cool2feel 阅读(315) 评论(0) 推荐(0)
摘要:一 go通信主张 数据放在共享内存中提供给多个线程访问的方式,虽然思想上简单,但却有两个问题: 使并发访问控制变得复杂 一些同步方法的使用会让多核CPU的优势难以发挥 Go的著名主张: 不要用共享内存的方式来通信,应该以通信作为手段来共享内存 Go推荐使用通道(channel)的方式解决数据传递问题 阅读全文
posted @ 2020-06-13 15:35 cool2feel 阅读(372) 评论(0) 推荐(0)
摘要:一 并发模型总结 多进程: 稳定性高:进程地址空间互相独立,一个进程出现问题,不会影响其他进程。Linux系统是个典型的多进程模型,稳定性极高,适合服务端开发 开销很大 多线程: 开销较小 协程: 程序执行效率高 非阻塞I/O: 无需痛苦的同步编程 交换数据方式: 多进程交换数据方式复杂(管道、消息 阅读全文
posted @ 2020-06-13 15:26 cool2feel 阅读(286) 评论(0) 推荐(0)
摘要:一 理解协程 协程:也称为纤程(Coroutine), 是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。 协程与进程、线程相比并不是一个维度的概念,协程不是被操作系统内核所管理的,而是完全由程序所控制,也就是在用户态执行。这样带来的好处是性能大幅度的提升,因为不会像线程 阅读全文
posted @ 2020-06-13 14:52 cool2feel 阅读(649) 评论(0) 推荐(1)
摘要:一 深入理解进程阻塞 进程间的通信时通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计: 消息的传递有可能是阻塞的或非阻塞的,也被称为同步或异步的。 《操作系统概论》 阻塞式发送:blocking send,发送方进程会被一直阻塞,直到消息被 阅读全文
posted @ 2020-06-12 11:13 cool2feel 阅读(761) 评论(0) 推荐(0)
摘要:一 线程概述 1.1 进程与线程创建 操作系统会为每个进程分配一定的内存地址空间,如图所示: 上图所示的是32位系统中虚拟内存的分配方式,不同系统分配的虚拟内存是不同的,但是其数据所占区域的比例是相同的: 32位:最大内存地址为232,这么多的字节数换算为G单位,即为4G。(换算为1G=1024MB 阅读全文
posted @ 2020-06-12 11:04 cool2feel 阅读(132) 评论(0) 推荐(0)
摘要:一 进程概念 进程:就是二进制可执行文件在计算机内存中的运行实例,可以简单理解为:一个.exe文件是个类,进程就是该类new出来的实例。 进程是操作系统最小的资源分配单位(如虚拟内存资源),所有代码都是在进程中执行的。 为了方便管理进程,每个进程都有自己的描述符,是个复杂的数据结构,我们称之为进程控 阅读全文
posted @ 2020-05-28 20:28 cool2feel 阅读(139) 评论(0) 推荐(0)
摘要:一 并发编程历史 在早期的操作系统中,各个任务的执行完全是串行的,只有在一个任务运行完成之后,另一个任务才会被执行,我们称之为 。 而现代操作系统引入了 的并发概念: 多道程序:当一个程序暂时不需要使用CPU的时候,系统会把该程序挂起或中断,此时其他程序可以使用CPU,多个任务在操作系统的控制中实现 阅读全文
posted @ 2020-05-22 15:16 cool2feel 阅读(172) 评论(0) 推荐(0)