1、go channel

channels 是 go 协程routines之间通信的方式,更为安全,为什么这么说,他可以理解为管道, 虽然任何语言可以使用共享变量的方式, 但是更加推荐使用channel,说到管道,读者可以理解一下大学里面学的操作系统,无论linux和windows都有进程通信管道的方法。
使用 go func() 来启动协程,所以go语言在这方面比c++和java有更多的优势。

c := make(chan int)

可以使用make 来生成线程间或协程间的通道

2、协程

协程方式是充分利用线程的方式之一,openMP是充分利用多核的优势。在go里面,可以使用

runtime.GOMAXPROCS(3)

来指定协程的启动数目,我们不能在语言层面指定调度,这个是底层调度。

3、案例

package mainimport ("runtime""fmt""time"
)
func main(){runtime.GOMAXPROCS(3)c := make(chan int)go sayT1(c)time.Sleep(time.Second)c<-1c<-2fmt.Print(runtime.NumCPU(),"\n")fmt.Println(runtime.NumGoroutine())var str stringfmt.Scan(&str)
}
func sayT1(c chan int){fmt.Println(<- c)fmt.Println(<- c)for i:= 0; i < 10; i++{fmt.Println("thread run 1")runtime.Gosched()}
}

上面一段代码启动了一个sayT1()的协程,在程序开头指定了用3个协程,

runtime.NumCPU()
得到系统所包含的cpu个数,注意是逻辑cpu。

c<-1
c<-2
表明向通道输入2个int型数据,分别是1和2,系统等待一秒。
可以看出在协程中阻塞等待了这两个数据,看打印:


所以这里说这样传数据是安全的,事实上我们可以先执行其他,最后再获取数据,也是没有问题的。

go 协程和协程通信相关推荐

  1. python 协程_Python 协程与 Go 协程的区别(一)

    ? "Python猫" ,一个值得加星标的公众号 花下猫语:年关将近,不知各位过得怎样?我最近有些忙,收获也挺多,以后有机会分享下.吃饭时间,追了两部剧<了不起的麦瑟尔夫人& ...

  2. 进程、线程、协程和管程

    这里写目录标题 进程.线程.协程和管程的概念 进程和线程区别 线程和协程的区别 协程为什么叫用户态线程 进程/线程切换所需要保存的信息 同一进程间的线程共享/独享哪些资源 线程崩溃一定会导致进程崩溃吗 ...

  3. 进程、线程、协程、管程

    进程.线程.协程.管程 一般一个应用程序整体是一个进程, 进程中有多个线程来完成应用的各个功能. 比如一款多模态睡眠监护应用. 整个应用就是一个进程,应用中有UI主线程,数据存储线程,数据绘图线程等. ...

  4. Kotlin协程:协程的基础与使用

    一.协程概述 1.概念 协程是Coroutine的中文简称,co表示协同.协作,routine表示程序.协程可以理解为多个互相协作的程序.协程是轻量级的线程,它的轻量体现在启动和切换,协程的启动不需要 ...

  5. Linux高性能网络:协程系列09-协程性能测试

    目录 Linux高性能网络:协程系列01-前言 Linux高性能网络:协程系列02-协程的起源 Linux高性能网络:协程系列03-协程的案例 Linux高性能网络:协程系列04-协程实现之工作原理 ...

  6. Linux高性能网络:协程系列08-协程实现之调度器

    目录 Linux高性能网络:协程系列01-前言 Linux高性能网络:协程系列02-协程的起源 Linux高性能网络:协程系列03-协程的案例 Linux高性能网络:协程系列04-协程实现之工作原理 ...

  7. python协成_Python协程(上)

    几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...

  8. Kotlin学习笔记26 协程part6 协程与线程的关系 Dispatchers.Unconfined 协程调试 协程上下文切换 Job详解 父子协程的关系

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 协程与线程的关系 import kotlinx.coroutines.* import java.util.concu ...

  9. Kotlin学习笔记24 协程part4 协程的取消与超时

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 1 如何取消协程 import kotlinx.coroutines.*/*** 协程的取消*/fun main() = ...

  10. 如何理解高并发中的协程?协程的实现和历史

    <Libco是一个C/C++协程库,在微信服务中广泛使用> <协程到底是什么?> <如何理解高并发中的协程?协程的实现和历史> 目录 普通的函数 从普通函数到协程 ...

最新文章

  1. .net mvc actionresult 返回字符串_字符串游戏之无效的身份证
  2. 树莓派3B+功耗测试、初体验、图形化配置树莓派3B+配置方法。Raspberry Pi 3B+测评...
  3. 慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结
  4. FAQ接口自动化_转载参考
  5. 人工智能技术结合制造业,是学术研究还是落地方案?!
  6. php 求数组合集,PHP数组排序函数合集 以及它们之间的联系分析
  7. 和java通信_[源码和文档分享]基于JAVA的即时通信软件
  8. nodejs开发——require与exports的使用
  9. 软件项目经理必备素质(转载)
  10. Is It A Tree?(并查集)
  11. PHP第三方易宝支付对接
  12. 时间序列分析-MA模型
  13. Java基于WEB的商品库存管理系统
  14. 【kali技巧】kali配置ssh服务
  15. 如何在敏捷中实施变更管理
  16. UE4学习之VR(三)
  17. android系统定制添加分辨率,density设置
  18. 《青春依然,再见理想——献给学弟学妹》大四学生的万字忏悔书,警示学弟学妹...
  19. 腾讯云互动直播SDK集成综述
  20. SQL Server 如何判断PLE (页面的预期寿命)

热门文章

  1. mysql把结果变横表_mysql纵表与横表转换实例
  2. 我最喜欢的二十句名言
  3. 成功者十三个价值连城的习惯
  4. 永辉发布元宵数据:汤圆销售明显提升,多个民生产品增长超150%
  5. 《理想之城》“打光太暗”是有意为之?算法工程师揭秘什么才是“好画面”...
  6. 外媒:麦当劳、星巴克、必胜客开始在萨尔瓦多接受比特币支付
  7. 台积电5nm生产线污染原因查明:不影响A15芯片量产
  8. Android 12 将支持游戏“边下边玩”
  9. 华为P50系列开始量产:Pro+版或进一步延期
  10. 月薪23333元!淘宝招募“首席鉴雕官”,只需天天哈哈哈哈哈