美文网首页
go快速学习_go并发之goroutine

go快速学习_go并发之goroutine

作者: 卖毛玉的小贩 | 来源:发表于2019-07-17 23:27 被阅读0次
本人不怎么喜欢写笔记博客啥的,所以通常是在学完一段时间后,才后知后觉的补充着写一点。
那么话不多说,言归正传,为什么我会在茫茫后端中选择go去学习呢?

大部分的原因就是因为,go足够轻量,对多线程的使用特别的舒服。
舒服的点也自然是go程,goroutine了。
说起这个,我们自然要讲一下,进程,线程,携程(我认为go程就是携程的一种)

进程

  1. 孤儿进程
    • 父进程先于子进程终止,子进程沦落为孤儿进程,init进程负责回收
  2. 僵尸进程
    • 子进程死亡,父进程尚未回收残留资源pcd时,子进程为僵尸进程
  3. 守护进程 daemon
    • 永久不结束
    • 通常不与前端进行数据交互
    • 不占用控制终端 — 服务器
    • 通常以d为结尾的单词

进程和线程

  • 进程:
    • 独立的地址空间,拥有pcb
    • 最小分配资源的单位
  • 线程:
    • 有独立的pcb,但没有独立的地址空间,共享进程的地址空间
    • 最小执行单位,cpu划分的时间片的最小依据
  • 区别:
    • 在于是否共享地址空间,独居-进程,合租-线程
  • 当一个进程创建了新的线程后,该进程就沦落为线程。

线程同步

  • 同步:协同步调,指定先后执行顺序。
  • 线程同步:多个控制流,共同操作一个共享资源,需要执行访问先后顺序,实现同步。
  • 同步方法:
  • 系统提供的所有同步机制,都是建议锁,不具有强制性,锁加或不加,受程序控制
    • 互斥锁 mutex
      • 排他性,多个控制流之间互斥
      • 持有后其他控制器无法进行任何操作
    • 读写锁
      • 读时共享,写时独占
      • 写锁优先级高
      • 读写锁只有一把,但具有两种属性(r/w)

协程

  • 轻量级的线程
  • 优点:
    • 内存空间比线程的开销要小
    • 省去了用户、内核空间切换的时间开销,执行效率提高
    • 在线程阻塞期间,执行其他指令,充分在当前程序中,提高CPU的使用率

比较

  • 进程:安全性,稳定性
  • 线程:节省系统资源,开销小,效率高
  • 协程:开销更小,cpu利用率更高,效率更高

goroutine

  • 创建:在函数调用之前添加go,创建go程
  • 特性:
    • 主go先于子go结束运行,则自动释放进程空间

runtime.Goexit()

  • return:关键字,返回当前函数调用到调用者那里去 defer有效
  • runtim.Goexit()函数:终止调用该函数的go程
    • ==主go程不能使用该函数==
    • defer有效
  • os.Exit:终止调用该函数的进程,defer无效

常见错误:
主函数里写go程后,运行发现无论如何也没有执行子go。
如果想要看go的异步特性,只需要在主main跑个死循环就可以。

相关文章

  • go快速学习_go并发之goroutine

    本人不怎么喜欢写笔记博客啥的,所以通常是在学完一段时间后,才后知后觉的补充着写一点。 那么话不多说,言归正传,为什...

  • 跟我一起学习GO语言008

    本节我们来看GO语言中的并发。 我们看并发,就不得不学习goroutine,goroutine是Go语言...

  • go入门(七)2018-07-19

    go并发 goroutine Go运行环境管理的轻量级线程go xxx 启动新的goroutine channel...

  • Go语言并发

    Go语言并发 Go语言级别支持协程,叫做goroutine Go 语言从语言层面支持并发和并行的开发操作 Go并发...

  • Go Goroutine

    协程并发 Go并发 什么是goroutine

  • Golang学习摘录七:并发

    Go使用channel和goroutine开发并行程序。goroutine 是 Go并发能力的核心要素。gorou...

  • goroutine理解和go内存模型

    原文链接 1. Go goroutine理解 Go语言最大的特色就是从语言层面支持并发(Goroutine),G...

  • Goroutine 是如何运行的

    在 Go 语言中,没有线程,只有 goroutine,这也是 Go 语言原生支持高并发的关键。 goroutine...

  • 【go】并发1

    go并发,只需要通过 go 关键字来开启 goroutine 即可。 goroutine 是轻量级线程,gorou...

  • Go的并发机制:线程模型

    目录 一、 Go的并发机制:线程模型二、 Go的并发机制:goroutine和channel[https://ww...

网友评论

      本文标题:go快速学习_go并发之goroutine

      本文链接:https://www.haomeiwen.com/subject/fjshlctx.html