| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 送了两趟外卖,我想明白了Goroutine + Channel -> 正文阅读 |
|
[Java知识库]送了两趟外卖,我想明白了Goroutine + Channel |
简介Goroutine 被称为Go协程,可以通过 go 关键词创建一个协程。
Channel 被称为通道,通过 make 关键创建。
Channel 分为无缓冲和有缓冲两种,有缓冲 channel 可以通过 make 的第二个参数设置缓冲大小。 Goroutine + 无缓冲 Channel在并发中,多个 Goroutine 之间相互通信,需要借助 channel 来实现。 下面示例代码中,启动两个协程,分别代表“点外卖的你”和“送外买的我”,我们分别在各自的协程中忙碌着自己的事情。我们通过 channel (门)进行通信。 对于一个无缓冲的 channel 来说,我把消息(鸡腿外卖)给你需要通过一个无缓冲的 channel (门)。无缓冲的 channel 就意味着,我必需亲手把鸡腿送到你的手上,而不能把鸡腿挂到门把手上就去忙其他事儿。
一段时间后,你忙完了其他事情,来门口拿鸡腿 我把鸡腿亲手交给你之后,便可以不再阻塞,我可以继续送其他订单。你拿到外卖,开始吃鸡。 如果有一次,你饿的不行,恰好忙完了手头的所有事儿,就来门口等外卖。当我外卖没送到前,你需要在这里阻塞,等待外卖。只有我敲门把鸡腿亲手递给你,你才能开吃。
Goroutine + 缓冲 Channel无缓冲的 channel,迫使我阻塞,影响了我送外卖的效率。我决定利用 于是,当我来到你的门口,我就可以把鸡腿挂到门把手上(
总结无缓冲 channel 就是需要我把鸡腿亲手交到你的手上,缓冲 channel 就是我可以把鸡腿挂到门把手上,等待你需要时来取。 看到这里你已经明白了 Goroutine + Channel ,接下来就留一个思考题,相信听懂了的你,一定能做出来~ 思考题:请执行下面输出结果
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:07:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |