一、go协程与go主线程

Go主线程:一个Go线程上,可以起多个协程,协程是轻量级的线程。

二、go协程特点

1、有独立的栈空间

2、共享程序堆空间

3、调度由用户控制

4、协程是轻量级的线程

三、入门练习

package mainimport ("fmt""time"
)func test()  {for i := 0;i <10 ;i++  {fmt.Println("协程:hello world",i)time.Sleep(time.Second)}
}
func main() {//开启协程go test()for i := 0;i <10 ;i++  {fmt.Println("主线程程:hello world",i)time.Sleep(time.Second)}
}

四、go协程流程图

五、MPG模式

1、M:操作系统的主线程(是物理线程)

2、P:协程执行需要的上下文

3、G:协程

六、设置cpu数

package mainimport ("fmt""runtime"
)func main() {//查看本机cpu个数cpu := runtime.NumCPU()fmt.Println(cpu)//设置要使用的cpu个数runtime.GOMAXPROCS(cpu-1)
}

七、资源竞争问题

使用全局变量加锁来解决

package mainimport ("fmt""sync""time"
)var Map = make(map[int]int,10)
//声明全局互斥锁
var look = sync.Mutex{}
//计算阶乘
func test1(n int)  {num := 1for i:=1;i <= n ;i++  {num *= i}//加锁look.Lock()Map[n] = num//解锁look.Unlock()
}
func main() {//开启协程for i:=1;i <= 20 ;i++  {go test1(i)}//休眠time.Sleep(time.Second * 10)look.Lock()for key, value := range Map {fmt.Println(key,value)}look.Unlock()
}

go学习 --- go协程相关推荐

  1. Lua学习——Coroutine协程

    在菜鸟教程学习lua时,在coroutine这一章看到这么一段 coroutine.running就可以看出来,coroutine在底层实现就是一个线程. 当create一个coroutine的时候就 ...

  2. Python 学习笔记 - 协程

    Python里面控制并发,除了多线程和多进程,还可以使用协程(CoRoutine).他是在一个线程内通过程序员人为的指定来进行切换 例1:通过switch()可以人为来回切换到另外一个函数:当所有函数 ...

  3. python学习之-- 协程

    协程(coroutine) 也叫:微线程,是一种用户态的轻量级线程,就是在单线程下实现并发的效果. 优点: 1:无需线程上下文切换的开销.(就是函数之间来回切换) 2:无需原子操作锁定及同步的开销.( ...

  4. python协程学习——写个并发获取网站标题的工具

    ​ 平时做渗透的时候,有时候给的是一些域名.一些 url .一些 ip 或者三者都有,手动去一个个地打开比较浪费时间.我们需要用最短时间发现一些有趣的目标,如 xx 管理后台.于是让我们用 pytho ...

  5. 超牛逼的异步协程爬虫

    写在前面: 本来这篇文章只是用来记录一下学习异步协程爬虫的笔记,感谢CSDN的大力支持,引来了很多关注和浏览,也有很多大佬的批评指针. 事先声明:本文只是学习使用,在爬虫的实战应用中还要添加诸多限制, ...

  6. 阿里开源 iOS 协程开发框架 coobjc源码分析

    背景 昨天朋友圈被一篇文章(以下简称"coobjc介绍文章")刷屏了:刚刚,阿里开源 iOS 协程开发框架 coobjc!.可能大部分iOS开发者都直接懵逼了: 什么是协程? 协程 ...

  7. 一文看透 Kotlin 协程本质

    前言 公司开启新项目了,想着准备亮一手 Kotlin 协程应用到项目中去,之前有对 Kotlin 协程的知识进行一定量的学习,以为自己理解协程了,结果--实在拿不出手! 为了更好的加深记忆和理解,更全 ...

  8. 枯燥的Kotlin协程三部曲(上)——概念启蒙篇

    0x0.引言 Kotlin 1.3 版本开始引入协程 Coroutine,简练的官方文档和网上一堆浅尝辄止的文章让我心里有些没底,不想止步于仅仅知道: ① Android中,Kotlin协程用于解决: ...

  9. C++ 开源协程库 libco——原理及应用

    1 导论 使用 C++ 来编写高性能的网络服务器程序,从来都不是件很容易的事情.在没有应用任何网络框架,从 epoll/kqueue 直接码起的时候尤其如此.即便使用 libevent, libev这 ...

最新文章

  1. Redis热点Key发现及常见解决方案
  2. python培训出来的有公司要吗-参加Python培训后真的能找到工作吗?上海Python培训...
  3. python自学步骤-Python入门深度学习完整指南
  4. 解决IDEA2020.1版本不兼容Lombok的问题
  5. c++ 编译添加dll_matconvnet安装、编译、配置
  6. php var_export与var_dump 输出的不同
  7. WebStorm按Tab建快速生成代码模块
  8. 飞秋的不定长度字符串处理方法
  9. 2016/05/13 thinkphp 3.2.2 ① 数据删除及执行原生sql语句 ②表单验证
  10. js关于两个字符串的加减乘除运算
  11. java基础知识精讲视频教程百度云盘分享!
  12. 吴恩达 深度学习 2021版 作业
  13. html爱心表白代码(最全)
  14. Override and Overload
  15. 世界33种名车标志及来历
  16. WPS文字目录怎么做?目录制作的三种方法
  17. 显存(Video Memory)
  18. 用python实现二分法求平方根_二分法求平方根(Python实现)
  19. 腾讯云服务器linux系统有图形界面,腾讯云CentOS7搭建图形化界面并远程连接
  20. 不同vlan间的通信--三层交换技术

热门文章

  1. HTML知识点学习(二)
  2. web全栈工程师简历
  3. Hopcroft-Carp(有点难)
  4. android 设置打印级别
  5. iOS视频编辑SDK
  6. android WIFI相关问题集合
  7. 用文件流下载文件( Blob)时各种类型文件的 type 整理
  8. linux mysql常用基本操作,Linux下MySQL数据库常用基本操作 一
  9. python-华为路由器交换机批量处理ip与mac绑定
  10. 安徽省大数据与人工智能竞赛经验分享-4【从赛题角度看人员分工】