启动了两个goroutine,并完成一些工作。在各自循环的每次迭代之后,在goroutine 会使用LoadInt64 来检查shutdown 变量的值。这个函数会安全地返回shutdown 变量的一个副本。如果这个副本的值为1,goroutine 就会跳出循环并终止。 ...
分类:
其他好文 时间:
2019-02-15 21:13:48
阅读次数:
198
golang中的channel channel用于goroutine之间的通信 如果不用channel,使用共享全局变量的方式,需要加锁 使用同步锁并发效率会很低 channel主要用于goroutine通信和解决主线程等待goroutine执行结束再退出的问题 basic concept of c ...
分类:
其他好文 时间:
2019-02-08 23:34:00
阅读次数:
286
goroutine示例 go // 主线程结束后 所有协程都会一起结束 // 在4个go程中结束时向chan c写入true // 开启go程后 在主线程中循环对管道c取值,取出4个true 说明go程执行完毕 再执行主线程并退出 func main() { c := make(chan bool, ...
分类:
其他好文 时间:
2019-02-08 20:09:22
阅读次数:
163
go cache是一款类似于memached 的key/value 缓存软件。它比较适用于单机执行的应用程序。 go cache实质上就是拥有过期时间并且线程安全的map,可以被多个goroutine安全访问。 下面举例说明其用法。 Demo output 2019/02/05 17:49:32 f ...
分类:
系统相关 时间:
2019-02-05 19:41:43
阅读次数:
305
恢复内容开始 一、go特点 一个文件属于一个包 package 垃圾回收机制,自动回收,不需要管理 天然并发 goroutine 轻量级线程,高效利用多核 channle管道通信机制 函数可以返回多个值 二、开发工具 vscode 插件 sublime Text Vim Emacs Eclipse ...
分类:
编程语言 时间:
2019-02-04 08:59:18
阅读次数:
153
1.goroutine在逻辑处理器的线程上进行交换 2.竞争状态:两个或者多个goroutine在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于互相竞争的状态对共享资源的读和写操作必须是原子化的,同一时刻只能有一个goroutine对共享资源进行读和写操作 3.使用竞争检 ...
分类:
其他好文 时间:
2019-02-03 12:52:50
阅读次数:
185
应用场景举例:一个任务管道满了,再往里面塞就塞不进去了,浏览器刷不出来了。用户即便关了浏览器可能依然在阻塞......packagemainimport"fmt"import"time"funcmain(){varchchanintch=make(chanint,10)ch2:=make(chanint,10)gofunc(){variintfor{ch<-itime.Sleep(time.
分类:
其他好文 时间:
2019-02-01 17:15:58
阅读次数:
217
本文索引 问题引入 context包简介 示例 问题引入 goroutine为我们提供了轻量级的并发实现,作为golang最大的亮点之一更是备受推崇。 goroutine的简单固然有利于我们的开发,但简单总是有代价的,考虑如下例子: golang func httpDo(req http.Reque ...
分类:
其他好文 时间:
2019-01-31 21:35:13
阅读次数:
165
两个进程执行两个goroutine 输出 一个进程执行两个goroutine 输出 ...
分类:
其他好文 时间:
2019-01-28 00:47:47
阅读次数:
116
Goroutine 是用户态自己实现的线程,调度方式遇到IO/阻塞点方式就会让出cpu时间(其实也看编译器的实现,如果TA在代码里面插入一些yield,也是可以的。 反正现在不是抢占式的。) 不能设置goroutine ID, 也拿不到(可以调用C API或者自己修改源码暴漏出来,实际上修改起来挺简 ...
分类:
其他好文 时间:
2019-01-18 12:22:44
阅读次数:
177