• Golang 协程、主线程


    Go协程、Go主线程


    1)Go主线程(有程序员直接称为线程/也可以理解成进程):一个Go线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程。
    2)Go协程的特点
    ·  有独立的栈空间
    ·  共享程序堆空间
    ·调度由用户控制
    ·  协程是轻量级的线程
    go线程-协程
    CSDN @富士康质检员张全蛋
     

    编译器做了优化

    线程虽然好,可以做到并发。但是线程还是比较吃资源,吃资源和占用cpu资源比较多。

    现在就是要解决,能不能让cpu全部都参与工作。其次就是线程有点笨重,这样就需要在底层做一些优化,这样线程就变的更加轻巧了。同时在线程之间可以做到资源的共享。

    在主线程里面可以跑很多很多的协程。

    一旦开启了一个协程,它们的数据空间是独立的。

    协程的开启和终止可以有程序员去控制的。

    开启协程,一般以函数为单位进行开启的.如果不使用go test(),那么就是顺序执行的。

    如果开启了协程就是穿插着执行了。

    1. package main
    2. import (
    3. "fmt"
    4. "strconv"
    5. "time"
    6. )
    7. func test() {
    8. for i := 0; i < 5; i++ {
    9. fmt.Println("hello test()" + strconv.Itoa(i))
    10. time.Sleep(time.Duration(1) * 1)
    11. }
    12. }
    13. func main() {
    14. //开启了一个协程
    15. go test()
    16. for i := 0; i < 5; i++ {
    17. fmt.Println("hello main()" + strconv.Itoa(i))
    18. time.Sleep(time.Duration(1) * 1)
    19. }
    20. }
    21. hello main()0
    22. hello test()0
    23. hello main()1
    24. hello test()1
    25. hello test()2
    26. hello main()2
    27. hello main()3
    28. hello test()3
    29. hello test()4
    30. hello main()4

    输出效果说明,main这个主线程和test协程同时执行。

    当执行main的时候就开启了一个主线程,往下执行发现go test(),这样就会开启一个新的分支然后执行,但是主线程并没有阻塞,它会继续往下走,发现for循环去执行,执行完毕主线程就退出。

    记住:只要开启了协程就相当于程序多了一个分支。

  • 相关阅读:
    一种基于区块链的物联网架构设计
    OpenTelemetry 深度定制:跨服务追踪的实战技巧
    Android使用Banner框架实现轮播图
    termius mac版无需登录注册直接永久使用
    揭秘APP看广告:收益如何稳定?
    Lua脚本实现setnx命令
    关于数据权限的设计
    UI自动化定位利器-xpath实战
    计算机网络
    [负载均衡]-LVS
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/132862279