摘要: 前言 前面我们为了解决go程同步的问题我们使用了channel, 但是go也提供了传统的同步工具. 它们都在go的标准库代码包 sync 和 sync/atomic 中. 下面我们来看一下锁的应用. 什么是锁呢? 就是某个协程(线程)在访问某个资源时先锁住, 防止其他协程的访问, 等访问完毕解锁后其 阅读全文
posted @ 2020-08-04 00:29 李培冠 阅读(13116) 评论(0) 推荐(0) 编辑
摘要: select的作用 Go里面提供了一个关键字 select, 通过 select 可以监听channel上的数据流动. select 的用法与 switch 语言非常类似, 由 select 开始一个新的选择块, 每个选择条件由 case 语句来描述. 与 switch 语句相比, select 有 阅读全文
posted @ 2020-08-04 00:28 李培冠 阅读(8970) 评论(0) 推荐(0) 编辑
摘要: Go语言中除了可以使用通道(channel)和互斥锁进行两个并发程序间的同步外,还可以使用等待组进行多个任务的同步,等待组可以保证在并发环境中完成指定数量的任务 在 sync.WaitGroup(等待组)类型中,每个 sync.WaitGroup 值在内部维护着一个计数,此计数的初始默认值为零。 等 阅读全文
posted @ 2020-08-04 00:26 李培冠 阅读(8765) 评论(0) 推荐(0) 编辑
摘要: 简介 channel 是 Go 语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel 是一个数据类型,主要用来解决 go 程的同步问题以及 go 程之间数据共享(数据传递)的问题。 goroutine 运行 阅读全文
posted @ 2020-08-04 00:24 李培冠 阅读(9008) 评论(0) 推荐(1) 编辑
摘要: 什么是 Goroutine goroutine 是 Go 并行设计的核心。goroutine 说到底其实就是协程,它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,Go 语言内部帮你实现了这些 goroutine 之间的内存共享。 执行 goroutine 只需极少的栈内存(大 阅读全文
posted @ 2020-08-04 00:22 李培冠 阅读(3597) 评论(0) 推荐(0) 编辑
摘要: 前言 简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。 随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会后台执行各种计算任务和网络请求。即使是传统的批处理问题--读取数据,计算,写输出--现在也会用并发来隐藏掉I/ 阅读全文
posted @ 2020-08-04 00:20 李培冠 阅读(3610) 评论(0) 推荐(0) 编辑
摘要: 指针是一个代表着某个内存地址的值, 这个内存地址往往是在内存中存储的另一个变量的值的起始位置. Go语言对指针的支持介于Java语言和 C/C++ 语言之间, 它既没有像Java那样取消了代码对指针的直接操作的能力, 也避免了 C/C++ 中由于对指针的滥用而造成的安全和可靠性问题. 指针地址和变量 阅读全文
posted @ 2020-08-04 00:17 李培冠 阅读(4079) 评论(2) 推荐(0) 编辑
摘要: 前言 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。 用结构体的经典案例:学校的学生信息,每个学生信息包含一个唯一的学生学号、学生的名字、学生的性别、家庭住址等等。所有的这些信息都需要绑定到一个实体中,可以作为一个整体单元被复制,作为函数的参数或返回值, 阅读全文
posted @ 2020-08-04 00:15 李培冠 阅读(3081) 评论(0) 推荐(0) 编辑