Golang语言学习-并发

goroutine:

由GO运行环境管理的轻量级线程

channel:

有类型的管道,操作符为 <- 数据流向箭头指向的方向

使用make(chan 缓冲数据类型 缓冲区长度)来创建

使用close(chan)来关闭管道,只有发送者才允许关闭管道

ch := make(chan int 10)

ch <- 10

a := <- ch

a := int(0)

a = <- ch

单向管道:单向管道只能用于发送或接收数据。

ch1 := make( chan int)

ch2 := <-chan int(ch1) //ch2就被定义为一个只能读取的channel

ch3 := chan<- int(ch1) //ch3就被定义为一个只能接收的channel

select:

为了让一个goroutine能在多个通讯操作上进行等待,可以使用select

select会阻塞,直到某个分支中的通讯准备好后可以继续执行。

当有多个通讯准备好时,会随机选择一个进行通讯。

同步:

同步必须使用到锁,sync包中提供了两种锁:sync.Mutex 和 sync.RWMutex。

Mutex是最简单的互斥量。

RWMutex也是一种互斥量,不过在读操作时,会阻止写,但不会阻止读。

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-02-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

笔记66 | eclipse/android studio/ADB查看Android应用内存使用情况

24640
来自专栏双十二技术哥

Weex系列(四)之Module源码解析

经过前面两篇文章的实践,我们学习了Weex的使用。本篇开始我们深入Weex的源码,一起探索Weex在安卓平台上是如何构建一套JS的运行框架,那从Module开始...

19110
来自专栏Laoqi's Linux运维专列

rsync 工具详解

rsync工具 : rsync 工具几乎在每天的工作当中都会用到,是日常工作的必备工具之一。我们必须要对 此工具了如指掌! (1)本地–>本地备份 (2)本地...

35570
来自专栏程序员互动联盟

linux设备驱动第三篇:如何写一个简单的字符设备驱动

在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动。本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符...

438140
来自专栏互联网技术杂谈

beanstalkc Tutorial 中文版

英文原版:https://github.com/earl/beanstalkc/blob/wip-doc-rtfd/doc/tutorial.rst

35980
来自专栏我是攻城师

如何在IDE中体验一把Java8?

34570
来自专栏蜉蝣禅修之道

获取pdf文档属性的方法

21740
来自专栏学海无涯

Java Web之MySQL在项目中的使用

尴尬:access denied for user ’root’@’localhost’ using password yes 有时候,在连接 MySQL 数据...

28660
来自专栏Golang语言社区

GDB使用详解

一、打开GDB 1、gdb filename 加载该文件到gdb 2、gdb file filename 如果gdb filename失败,可以在打开gd...

374100
来自专栏Java进阶架构师

02:SpringBoot整合SpringDataJPA实现数据库的访问(一)

Spring Data JPA等于在ORM之上又进行了一次封装,但具体的对数据库的访问依然要依赖于底层的ORM框架,Spring Data JPA默认是通过Hi...

7810

扫码关注云+社区

领取腾讯云代金券