Go 初体验 - channel.1 - 基本用法
channel 分为两种:
1. 无缓冲 channel
2. 缓冲 channel
无缓冲 channel 的使用必须遵循一个原则:推送和读取必须同时存在,否则就发生死锁
先上代码:

这里定义了一个 int 型的信道 c1,然后通过辅助协程并行给 c1 推送 v(就是 i)然后又在主协程读取。
输出:

有缓冲 channel 必须遵循一个原则:要确保 channel 缓冲的个数与推送、读取成比例

输出:

这里定义了一个缓冲区长度为3的 channel,然后推送3条消息,接着循环读取这个 channel,直到 channel 为空。
注意 close(c2)必须有,不然就是死锁,跟上篇文章的死锁情况1是一个道理,close()语句的作用就是告诉计算机我这个 channel 关闭了,不会再接收任何消息啦,故,主携程不会阻塞而发生死锁。
升级一下代码,使用辅助携程实现:

调用:

75行便是使用辅助携程实现给 c3 推送消息
再升级一下,我们用 channel 来实现一个单发单收的队列:

调用:

93行模拟了真实推送情况,每隔2秒推送一个消息,而主携程这里一直在等待,为什么没有死锁?
因为96行 :)
不要通过共享内存来通信,而应该通过通信来共享内存
Go 初体验 - channel.1 - 基本用法的更多相关文章
- Go 初体验 - channel.2 - 超时机制
channel 虽然很好用,但是我们也要考虑异常情况,比如:超时 go 语言怎么解决这个超时问题呢? 可以利用 select 语句: select 的用法与 switch 语言非常类似,由 selec ...
- Handlebars的基本用法 Handlebars.js使用介绍 http://handlebarsjs.com/ Handlebars.js 模板引擎 javascript/jquery模板引擎——Handlebars初体验 handlebars.js 入门(1) 作为一名前端的你,必须掌握的模板引擎:Handlebars 前端数据模板handlebars与jquery整
Handlebars的基本用法 使用Handlebars,你可以轻松创建语义化模板,Mustache模板和Handlebars是兼容的,所以你可以将Mustache导入Handlebars以使用 Ha ...
- 并发王者课 - 青铜4:synchronized用法初体验
在前面的文章<双刃剑-理解多线程带来的安全问题>中,我们提到了多线程情况下存在的线程安全问题.本文将以这个问题为背景,介绍如何通过使用synchronized关键字解这一问题.当然,在青铜 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 百度EChart3初体验
由于项目需要在首页搞一个订单数量的走势图,经过多方查找,体验,感觉ECharts不错,封装的很细,我们只需要看自己需要那种类型的图表,搞定好自己的json数据就OK.至于说如何体现出来,官网的教程很详 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- EF Code First 初体验
Code First 顾名思义就是先代码,再由代码生成数据库的开发方式. 废话不多说,直接来一发看看:在VS2010里新建一个空白解决方案,再依次添加两个类库项目:Model.DataAccess和一 ...
- Flume日志采集系统——初体验(Logstash对比版)
这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...
- Java8初体验(二)Stream语法详解
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验(一)lambda表达式语法比 较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例 ...
随机推荐
- oracle 子查询中null的问题(in 和 not in)
这里的in后面的句子可以理解为or拼接,简单举例即 in (9566,9839,null)可以等价于mgr=9566 or mgr=9839 or mgr=null, not in (9566,983 ...
- PHP memcached memcache 扩展安装
好久没配置环境今天安装PHP 开发环境, 项目比较老,一开始以为项目用的是memcache 装完后发现 项目用的是memcached 所以正好两个都装了. 碰到些坑希望能帮助到百度到这篇文章的伙伴 . ...
- 使用PHP几种写99乘法表的方式
首先按照规矩,还是先废话一番,对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题. 但不要小看这道练习题,它对于逻辑的考验还是相当到位的. 也许有人会觉得,九九乘法表有什么难的, ...
- 一、K3 WISE 实施顾问教程《进度1-谈谈实施顾问》
1.为什么要开这门课? 从自身的原因说起,在我从开发顾问转岗做实施顾问.售后服务顾问时,我就定下了我做顾问的目标. 第一个核心目标,帮助成千上万的企业客户促进他们商业的成功!第二个目标,成为最顶级的顾 ...
- 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
原文地址:https://www.cnblogs.com/sunddenly/p/4092654.html 引言 本节本来是要介绍ZooKeeper的实现原理,但是ZooKeeper的原理比较复杂,它 ...
- 【问题】Can't load AMD 64-bit .dll on a IA 32-bit platform
文件下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.14/binaries/ 按自己的提示找到32位或者 ...
- UCloud 的安全秘钥 (计蒜客初赛第五场)(待解决)
20.7% 1200ms 262144K 每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年 ...
- Java课程寒假之开发记账本软件(网页版)之三
一.实现基础功能之一(查询)(补) 在上一篇中解释的不够详细,在本篇中补充一下指定日期查询,其实和查询没有什么区别,就是设置select下拉框来对于日期的起始与结束日期,然后就是一个简单的mysql语 ...
- poj2109 【贪心】
Current work in cryptography involves (among other things) large prime numbers and computing powers ...
- 动态获取移动端视宽,从而结合rem达到适配
// jq !function(){ var windowWidth= $(window).width(); if(windowWidth > 750) { windowWidth = 750; ...