51CTO的无闻的Go基础教程中并发相关的概念有错误

无闻并发的课程看了下,然后给他搞晕了,册那,我是铂金便便啊,脾气是很屎的,你不解释清楚么,我就自己去搞清楚。

无闻说缓冲channel不会阻塞,非缓存channel会阻塞,真的是这样么?

无闻本人举了个例子

func main(){
    c:=make(chan bool,1)
    go fun(){
        fmt.println("GO!")
        <-c
    }()
    c<-true
}

上面的代码只要把1去掉就会输出GO!不去掉就不会输出GO!他说这就证明缓冲channel不会阻塞,非缓存channel会阻塞。那好吧,便便不信邪,我来一段代码

// testgo project main.go
package main

import (
    "fmt"
    "time"
)

func main() {
    c:=make(chan bool,1)
    go func(){
        fmt.Println("GO!")
        <-c
        fmt.Println("123!")
    }()
    time.Sleep(1*time.Second)
    fmt.Println("111")
    c<-true
    time.Sleep(1*time.Second)
    fmt.Println("222")
    time.Sleep(2*time.Second)
}

大家猜猜,输出是咩?

GO!

111

123!

222

成功: 进程退出代码 0.

进程goroutines在main进程建立好管道c的时候与main进程同时运行,main先sleep了1秒,首先输出goroutines的GO!,然后从c中取对象,注意哟,是一个缓冲管道哟,按照无闻的说法应该不会阻塞哟,应该直接输出123的哟,结果捏?马桶堵住了!!!阻塞了!!!管道里面没有对象,取不出来,一直在等其他进程往管道里面塞对象,所以说只要有管道,就是会阻塞的。我的例子里面首先输出的是111,等main进程把对象塞到管道里面的时候,goroutines进程就不阻塞了,输出123.

结论就是 缓存channel 取不到会阻塞

最后给大家一个自己长期工作以来的忠告,不要盲目相信权威,不知道就去试一下,老师说的不一定对,还有就是自己如果真要上传视频教程,请先审核下,不然误人子弟啊

时间: 2024-12-06 21:16:08

51CTO的无闻的Go基础教程中并发相关的概念有错误的相关文章

Python 基础教程中的问题及解决方案(1)

1. 在ubuntu中,调用终端时如: f = open('/home/theone/test_input.txt', 'r') 中的txt格式文本不能加后缀 正确的应为:  f = open('/home/theone/test_input', 'r') 同样的,生成html时:$ python simple_markup.py < test_input.txt > test_output.html 也应为:$ python simple_markup.py < test_input

分享《Python数据分析基础教程:NumPy学习指南(第2版)》高清中文PDF+英文PDF+源代码

下载:https://pan.baidu.com/s/1YSD97Gd3gmmPmNkvuG0eew更多资料分享:http://blog.51cto.com/3215120 <Python数据分析基础教程:NumPy学习指南(第2版)>高清中文PDF+高清英文PDF+源代码 高清中文版PDF,249页,带目录和书签,文字能够复制粘贴:高清英文版PDF,310页,带目录和书签,文字能够复制粘贴:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:其中高清中文版如图: 原文地址:http://

Python 基础教程

Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议.现在开始学习 Python! 谁适合阅读本教程?本教程适合想从零开始学习Python编程语言的开发人员.当然本教程也会对一些模块进行深入,让你更好的了解Python的应用. 学习本教程前你需要了解在继续本教程之前

Golang友团无闻Go语言Web基础视频教程

教程内容:GO语言资料Golang友团无闻Go语言编程基础Golang友团无闻Go语言Web基础教程 Go语言Web基础教程列表:[Go Web基础]12Go Web 扩展学习.mp4[Go Web基础]11简易的 RPC 实现.mp4[Go Web基础]10自建 HTTP 中间件.mp4[Go Web基础]09国际化支持.mp4[Go Web基础]08文章附件上传.mp4[Go Web基础]07为文章添加标签.mp4[Go Web基础]06评论与分类显示.mp4[Go Web基础]05文章的添

Python基础教程:Python学习视频Python让你敲的代码不再是造轮子

你敲的代码是在造轮子?那就学Python呗!_Python基础教程 Bruce大神说" 人生苦短,我用Python ". 从公司角度而言: 国内基于Python创业成功的案例不在少数,豆瓣.知乎.果壳,全栈都是 Python,大家对Python自然有信心.并且从这几家公司出来的程序员与 CTO,创业的话一般都会选择Python. 从开发者个人角度而言: 计算机语言只是用来达成目的工具,?各种强大的第三方库,拿来就能用才是王道,让程序替代我们执行一些枯燥繁琐的工作.?至于句式是否优美.能

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

从Pitre《Swift 基础教程2nd》开始

看了两天<Learn Objective-C on the MAC> 中文版本<Objective-C基础编程>,大概认真读到了第9章内存管理部分,感觉这语言可比C++简单多了. 第一天,因为有C语言基础的缘故,我在windows 上安装了GNUstep (Objective-C)开发环境,变看电子书籍,边在PC上编译运行树上的示例,几乎一个都没放过,还做了不少笔记. (毕竟作者 Mark Dalrymaple & Scott Knaster 是高屋建瓴,叙述技术娓娓道来,

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章)

SQL Server2012 T-SQL基础教程--读书笔记(8 - 10章) 示例数据库:点我 CHAPTER 08 数据修改 8.1 插入数据 8.1.1 INSERT VALUES 语句 8.1.2 INSERT SELECT 语句 8.1.3 INSERT EXEC 语句 8.1.4 SELECT INTO 语句 8.1.5 BULK INSERT 语句 8.1.6 标识列属性和序列对象 8.1.6.1 标识列属性 8.1.6.2 序列对象 8.2 删除数据 8.2.1 DELETE 语