原文连接:http://targetliu.com/2017/5/2...
好久没有发过文章了 - -||,今天发一篇 golanggoroutine 相关的学习笔记吧,以示例为主。

WaitGroup

WaitGroupsync 包中,用于阻塞主线程执行直到添加的 goroutine 全部执行完毕。

Context

Context 是在 Go1.7 中移入标准库的。

Context 包不仅实现了在程序单元之间共享状态变量的方法,同时能通过简单的方法,使我们在被调用程序单元的外部,通过设置ctx变量值,将过期或撤销这些信号传递给被调用的程序单元。

goroutine的定时器及超时

这是两个有趣又实用的功能,在标准库 time 包里提供。

示例

源码

<!--more-->

package mainimport ("context""fmt""sync""time"
)func main() {ch := make(chan int)//定义一个WaitGroup,阻塞主线程执行var wg sync.WaitGroup//添加一个goroutine等待wg.Add(1)//goroutine超时go func() {//执行完成,减少一个goroutine等待defer wg.Done()for {select {case i := <-ch:fmt.Println(i)//goroutine内部3秒超时case <-time.After(3 * time.Second):fmt.Println("goroutine1 timed out")return}}}()ch <- 1//新增一个1秒执行一次的计时器ticker := time.NewTicker(1 * time.Second)defer ticker.Stop()//新增一个10秒超时的上下文background := context.Background()ctx, _ := context.WithTimeout(background, 10*time.Second)//添加一个goroutine等待wg.Add(1)go func(ctx context.Context) {//执行完成,减少一个goroutine等待defer wg.Done()for {select {//每秒一次case <-ticker.C:fmt.Println("tick")//内部超时,不会被执行case <-time.After(5 * time.Second):fmt.Println("goroutine2 timed out")//上下文传递超时信息,结束goroutinecase <-ctx.Done():fmt.Println("goroutine2 done")return}}}(ctx)//等待所有goroutine执行完成wg.Wait()
}

执行结果

1
tick
tick
tick
goroutine1 timed out
tick
tick
tick
tick
tick
tick
tick
goroutine2 done

Golang中WaitGroup、Context、goroutine定时器及超时学习笔记相关推荐

  1. Golang中WaitGroup使用的一点坑

    Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...

  2. SVO中 Inverse Compositional Image Alignment方法的学习笔记

    SVO中 Inverse Compositional Image Alignment方法的学习笔记 这篇文章 光流法简介 逆向光流法 结尾 这篇文章  在SVO系统中的"Relaxation ...

  3. 深入理解Golang中的Context包

    context.Context是Go语言中独特的设计,在其他编程语言中我们很少见到类似的概念.context.Context深度支持Golang的高并发. 1. Goroutine和Channel 在 ...

  4. java中预编译是啥意思_JAVA学习笔记预编译

    JAVA学习笔记预编译 (2011-07-30 02:36:17) 标签: 杂谈 第顺次运行jsp时jsp将被改换成servlet(第顺次工夫较长,而尔后就会快许多) 搭配好的利用过程能够穿越设置js ...

  5. python中socket模块常用吗_python网络学习笔记——socket模块使用记录

    此文章记录了笔者学习python网络中socket模块的笔记. 建议初次学习socket的读者先读一遍socket模块主要函数的介绍. socket模块的介绍可以参考笔者的前一篇关于socket官方文 ...

  6. mysql循环查询一个表中的数据并进行修改_JavaScript学习笔记(二十四)-- MYSQL基础操作...

    MYSQL mysql 是一个数据库的名字 和 php 合作的比较好的数据库 之前我们说过一个问题,前端向后端索要数据,后端就是去数据库中查询数据,返回给前端 接下来就聊聊使用 php 操作数据库 M ...

  7. c语言中否则指令不能用,C语言学习笔记

    此文章为个人学习时记录笔记,顺便试试MarkDown,不是教程-. C语言学习笔记 Mac系统的使用 Finder 文件管理系统 Dock 快捷栏 系统偏好设置 Safari浏览器 App Store ...

  8. shell中文件路径用变量定义_shell学习笔记01(概述amp;变量)

    Shell概述 为什么要学习Shell呢? 因为有用. Shell脚本入门 1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创 ...

  9. mysql中10049是什么错误_【学习笔记】Oracle数据库10049用于分析SQL解析笔记案例

    [学习笔记]Oracle数据库10049用于分析SQL解析笔记案例 时间:2016-11-05 13:54   来源:Oracle研究中心   作者:HTZ   点击: 次 天萃荷净 Oracle研究 ...

最新文章

  1. 发现一个有意思的博主(科研工作者)
  2. R语言实现金融数据的时间序列分析及建模
  3. 【Android 逆向】Linux 文件分类 ( 普通文件 | 目录文件 | 链接文件 | 字符设备文件 | 管道文件 | 块设备文件 )
  4. 【haproxy初始化】init_haproxy.sh
  5. java多个类调用,java起用多进程调用某个类(是class文件)
  6. 博客园jquery专题
  7. [C++]指针与引用(应用辨析)
  8. 《维C中国》乡村助农暖人心第三站嘉宝果农场
  9. 班级网站java_基于jsp的班级网站-JavaEE实现班级网站 - java项目源码
  10. Xcode6 新特性
  11. HTMLCSS仿京东注册页面制作静态页面总结
  12. 阿里云安全防护是如何做到的?有怎样的安全生态圈
  13. 虚拟环境Vmware下改变Linux(CentOS7)IP地址
  14. GAMES101现代计算机图形学入门——几何表示之曲线与曲面
  15. NOAA(美国国家海洋和大气管理局)逐月数据下载文件之官方说明文档(GSOM)
  16. 如何预防AV终结者病毒
  17. 中国社科发布:十大知名调查研究咨询公司
  18. Zend Framework教程-Zend_View
  19. Elasticsearch插件管理(ik分词器、附件文本抽取插件)
  20. php get微信接口乱码,php版本微信公众平台回复乱码问题解决方法

热门文章

  1. 不要直接对Request.Headers[If-Modified-Since]使用Convert.ToDateTime
  2. 阿里云服务器下安装LAMP环境(CentOS Linux 6.3) 安装与配置 Apache 服务
  3. 转 carrer 之感
  4. C# 打开指定的文件夹 记住路径中 / 与 \ 的用法
  5. 通信网络安全分层及关键技术解决
  6. opencv,用摄像头识别贴片元件的定位和元件的角度(转载)
  7. Git for Windows之推送本地版本库到远程仓库
  8. shell 变量相关的命令
  9. Android为TV端助力 转载:android自定义view实战(温度控制表)!
  10. 根据上边栏和下边栏的高度进行布局