Go语言并发编程(2):channel 通道介绍和使用
一、简介
channel 不仅可以用于 goroutine 间进行安全通信,还可以用于同步内存访问。
而且 Go 社区强烈推荐使用 channel 通道实现 goroutine 之间的通信,
不要通过共享内存来通信,而应该通过通信来共享内存。
Go 从语言层面保证了同一时间只有一个 goroutine 能够访问 channel 里的数据,从而保证数据安全。
在 Go 中使用 channel 通信,通过通信来传递内存数据,让内存数据可以在不同的 goroutine 之间进行传递,而不是
用共享内存来通信。
二、channel 的基本使用
前面有 2 篇文章介绍 chanel 的使用:
https://www.cnblogs.com/jiujuan/p/11723586.html goroutine 协程和 channel 通道
https://www.cnblogs.com/jiujuan/p/16014608.html golang 中 channel 的详细使用、使用注意事项及死锁分析
还有 1 篇讲 channel 的原理:
- https://www.cnblogs.com/jiujuan/p/12026551.html 深入理解Go语言:channel原理
三、channel 使用注意事项
关闭 channel
- 一般由发送端关闭 channel
- 向一个已经关闭的 channel 发送数据,会 panic
- 读取关闭的 channel ,返回零值
nil channel
- 读取一个 nil channel,操作将阻塞
所以需要阻塞时,你可以手动修改 channel 为 nil,就会出现阻塞效果。
for...range... 遍历channel
当 for range 遍历 channel 时,如果发送者没有关闭 channel 或在 range 之后关闭,会导致死锁。
Go语言并发编程(2):channel 通道介绍和使用的更多相关文章
- Go语言 并发编程
Go语言 并发编程 作者:Eric 微信:loveoracle11g 1.创建goroutine // 并行 是两个队列同时使用两台咖啡机 // 并发 是两个队列交替使用一台咖啡机 package m ...
- 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球.Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为<Go语言并发之道>的书籍被翻 ...
- 并发编程--Concurrent-工具类介绍
并发编程--Concurrent-工具类介绍 并发编程--Concurrent-工具类介绍 CountDownLatch CylicBarrier Semaphore Condition 对象监视器下 ...
- Go语言并发编程总结
转自:http://blog.csdn.net/yue7603835/article/details/44309409 Golang :不要通过共享内存来通信,而应该通过通信来共享内存.这句风靡在Go ...
- golang并发编程goroutine+channel(一)
go语言的设计初衷除了在不影响程序性能的情况下减少复杂度,另一个目的是在当今互联网大量运算下,如何让程序的并发性能和代码可读性达到极致.go语言的并发关键词 "go" go dos ...
- go语言并发编程
引言 说到go语言最厉害的是什么就不得不提到并发,并发是什么?,与并发相关的并行又是什么? 并发:同一时间段内执行多个任务 并行:同一时刻执行多个任务 进程.线程与协程 进程: 进程是具有一定独立功能 ...
- Go语言并发编程示例 分享(含有源代码)
GO语言并发示例分享: ppt http://files.cnblogs.com/files/yuhan-TB/GO%E8%AF%AD%E8%A8%80.pptx 代码, 实际就是<<Go ...
- Golang并发编程有缓冲通道和无缓冲通道(channel)
无缓冲通道 是指在接收前没有能力保存任何值得通道.这种类型的通道要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收操作.如果两个goroutine没有同时准备好,通道会导 ...
- Java NIO系列教程(二) Channel通道介绍及FileChannel详解
目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ...
- Java并发编程-volatile可见性的介绍
要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么用? ...
随机推荐
- [转帖]ASH、AWR、ADDM区别联系
==================================================================================================== ...
- [转帖]如何在KingbaseES数据库查看数据库和表的大小
关键字 kingbaseES,数据库大小,表大小 1.查看单个数据库的大小 使用ksql连接到数据库,使用sys_database_size函数 kapp=# select sys_database_ ...
- [转帖]TiKV集群搭建
https://www.cnblogs.com/luohaixian/p/15227788.html 1.准备环境 准备4台ubuntu 16.04虚拟机 部署规划: 节点类型 CPU 内存 存储 部 ...
- MySQL控制权限
编写顺序和执行顺序是不一样的 编写顺序: SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 ...
- 离线下载和安装UWP(windows应用商店)软件
离线下载uwp安装包 打开商店,然后搜索您要的应用程序名称,进入应用界面 点击 分享按钮,在弹出窗口中选择[复制链接] 把链接粘贴到:https://store.rg-adguard.net/ 默认选 ...
- 剪粘板增强小工具(可多次Ctrl+V)
前言 windows的剪贴板中存储是的最新一次的复制结果,比如先复制A,再复制B,C,在按下粘贴键时粘贴的是最后一次的结果C,在工作时有时候会遇到需要多次复制粘贴的情景,我就在思考有没有一款工具可以保 ...
- 【算法】【回溯】N皇后问题【力扣-51】超详细的注释和解释手撕N皇后
[算法][回溯]N皇后问题[力扣-51]超详细的注释和解释手撕N皇后 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我 ...
- 基于OpenEuler的信创国产瘦客户机软件系统 DoraOS
DoraOS是一款瘦客户机系统软件,最新版本基于OpenEuler开发.可以将主机转化为专业的瘦客户机.目前支持x86架构的硬件. 软件下载地址为: https://www.doracloud.cn/ ...
- (C语言)每日代码||2023.12.24||fwrite()可以写入字符数组中的'\0'
void test() { FILE* fp = fopen("test.txt", "w"); if (fp == NULL) { perror(" ...
- Delphi判断一个字符串在另一个字符串中出现的次数 7个方法的效率对比。
unit Unit14; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...