协程

  执行体是个抽象的概念,在操作系统层面有很多个概念与之对应,如操作系统自己掌管的进程(process),进程内的线程(thread),以及进程内的协程(coroutine,也叫轻量级线程).与传统的线程和进程比,协程的最大优势在于其"轻量级",可以轻松创建上百万而不导致系统资源耗尽,而线程和进程通常最多不能超过一万个,这也是协程叫轻量级线程的原因.

  Go语言在语言级别支持轻量级线程,叫goroutine,Go语言标准库提供的所有系统调用操作,都会出让CPU给其他goroutine,这让轻量级线程的切换不依赖于系统的线程和进程,也不依赖于CPU的核心数量.

  go语言执行机制:

   go程序从初始化main package并执行main()函数开始,当main()函数返回时,程序退出,且程序并不等待其他goroutine(非主goroutine)结束.

     要让主函数等待所有的goroutine退出后再返回,如何知道所有的goroutine都退出了呢?这就引出了多个goroutine之间通信的问题.

  并发通信:

   常见两种并发通信模型:

    共享数据是指多个并发单元分别保持对同一个数据的引用,实现对该数据的共享.被共享的数据可能有多种形式,比如内存数据块,磁盘文件,网络数据等.常用内存共享.

    消息机制认为每个并发单元是自包含的,独立的个体,并且都有自己的变量,但在不同并发单元间这些变量不同享.每个并发单元的输入和输出只有一种,那就是消息.有点类似进程的概念,每个进程不会被其他进程打扰,它只做好自己的工作就可以了,不同进程间靠消息来通信,他们不会共享内存.

    go 语言提供的消息通信机制被称为channel.

最新文章

  1. Javascript学习笔记:闭包题解(3)
  2. 【131031】rel 属性 -- link标签中的rel属性,定义了文档与链接的关系
  3. SVG操作插件:SVG.JS 个人提取部分实用中文文档
  4. shell脚本编程-循环(for、while、until)
  5. asp.net页面间传值的几种方法
  6. SQL 存储过程中in
  7. 使用Visual Studio创建简单的自己定义Web Part 部件属性
  8. 【不积跬步,无以致千里】关闭631端口cups打印服务和8009端口ajp
  9. .htaccess 设置
  10. Winet API 支持HTTPP/SOCKS代理
  11. [LeetCode] 033. Search in Rotated Sorted Array (Hard) (C++)
  12. Java导出防止小数显示不全工具类
  13. Autofs自动挂载探讨
  14. 【nginx】nginx的工作模式和信号量控制
  15. Git使用手册【转】
  16. background-color:transparent
  17. SpringMVC(五)-- springmvc的系统学习之拦截器
  18. 右键添加git bush here
  19. JWT token心得
  20. 【剑指offer】11--旋转数组的最小数字(二分查找)

热门文章

  1. RC522射频卡读写模块驱动(仅读取)
  2. XL4001 典型应用电路
  3. python 的回调函数
  4. 【easy】404. Sum of Left Leaves
  5. 51nod--1134 最长递增子序列 (动态规划)
  6. 在浏览器中查看.vue文件的源码
  7. Python知识目录
  8. Fiddler 抓包设置
  9. scrapy_redis 相关: 将 jobdir 保存的爬虫进度转移到 Redis
  10. CoopyIII开发文档之控制LED灯开关