• golang 并发编程


    一、goroutine

    GMP 模型:

    M:machine。一个M对应一个内核级线程,相当于内核级线程在go中的映射,执行代码的线程(CPU)
    P:processor 一个P代表执行go代码所需要的上下文环境,Processer 调度,上下文的切换,内存申请
    G:goroutine,是一个代码片段,相当于用户级线程,例程,goroutine
    MPG:
    1、每个M都会与一个内核级线程绑定,在运行时,一个M同时只能绑定一个内核级线程
    2、P和G的关系是可以一对多的

    二、并发的方法

    1、sync包工具:
    Mutex:互斥锁
    RWMutex:读写锁
    WaitGroup:并发等待组
    Map:并发安全字典
    Once:单例模式
    Cond:同步等待条件
    Pool:临时对象池
    2、Mutex
    保证在同一时间段内有且仅有一个goroutine持有锁
    这就保证了某一时间段内有且仅有一个goroutine访问共享资源,其他申请锁的goroutine将会被阻塞直到锁被释放
    3、RWMutex
    1)、在同一个时间段只能有一个goroutine获取到锁
    2)、在同一事件段内可以有多个goroutine获取到锁
    3)、在同一时间段只能存在写锁或读锁(读锁和写锁互斥)
    4、WaitGroup
    使用WaitGroup的goroutine会等待预设好数量的goroutine都提交执行结束后,才会继续往下执行代码
    在goroutine调用WaitGroup之前我们需要保证WaitGroup中等待数量大于1
    保证WaitGroup.Done()执行的次数与WaitGroup.Add()相同,过少会导致等待groutine死锁,过多会导致panic
    5、Map

  • 相关阅读:
    SpringMVC的自定义校验器
    Spring 国际化 异常:No message found under code 'message' for locale 'zh_CN'.
    《Redis实战》学习实践
    博客系统开发问题
    牛人博客
    Lambda表达式
    红黑树
    配置mysql的主从复制
    mysql 存储过程入门
    一个稍复杂的mysql存储过程
  • 原文地址:https://www.cnblogs.com/wuchangblog/p/16353405.html
Copyright © 2020-2023  润新知