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的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么用? ...
随机推荐
- [转帖]VMware Workstation PRO 17.0.2正式版+激活密钥
https://www.isharepc.com/36181.html VMware Workstation PRO 17是一个简化的桌面虚拟化应用程序. 它在同一台计算机上运行一个或多个操作系统而无 ...
- 【转帖】eBay 云计算“网”事:网络超时篇
https://www.infoq.cn/article/JmCbkA0XX9NqrcX6loIo eBay技术荟 2020-06-19 本文字数:5508 字 阅读完需:约 18 分钟 导读 eBa ...
- [转帖]Nginx四层负载均衡详解
https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 202 ...
- 我们开源了一个轻量的 Web IDE UI 框架
我们开源了一个轻量的 Web IDE UI 框架 Molecule 一个轻量的 Web IDE UI 框架 简介 Molecule 是一个受 VS Code 启发,使用 React.js 构建的 We ...
- R2M分布式锁原理及实践
作者:京东科技 张石磊 1 案例引入 名词简介: 资源:可以理解为一条内容,或者图+文字+链接的载体. 档位ID: 资源的分类组,资源必须归属于档位. 问题描述:当同一个档位下2条资源同时审批通过时, ...
- css水平居中的5种几种方式
元素水平居中的第一种方式 子元素不需要宽度也可以 <div class="box"> <div class="son"> 我是内容 &l ...
- css 动画 div顺时针方向移动,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 像elementui一样封装自定义按钮
<template> <div> <button @click.prevent="coverHandler" class="btn-btn& ...
- TienChin 渠道管理-表创建
在若依当中,有个槽点,就是数据库当中的删除标识状态一般 0 是 false,1 是 true,在若依当中反而 0 是 true,1 是 false. 渠道表设计,我这里就直接贴成品的创建表 SQL: ...
- python快速入门【一】-----基础语法
python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...