GO与并发

并发

并发与并行

  • 并行:在同一时刻,有多条指令在多个处理器上同时执行
  • 并发:在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行

进程 | 线程 | 协程

  • 进程:是操作系统对一个正在运行的程序的一种抽象,是资源分配的基本单位

  • 线程:是轻量级的进程,进程中的实际运作单位,是操作系统调度的基本单位

  • 协程:是用户态的线程,调度完全由用户控制,拥有自己的寄存器上下文和栈

  • 一个程序至少有一个进程,一个进程至少有一个线程

  • 进程与线程区别:

    • 进程间相互独立互不干扰,线程共享进程的资源
    • 线程之间通信比进程之间通信更方便,线程切换比进程切换开销小
    • 进程让操作系统实现并发性,线程让进程的内部实现并发
  • 线程与协程区别:

    • 线程是操作系统提供的,由内核调度,协程是由程序调度
    • 协程是子程序切换不是线程切换
  • 多进程使用场景:对资源的管理和保护要求高,不限制开销和效率时

  • 多线程使用场景:要求效率高,频繁切换时,资源的保护管理要求不是很高时

GO并发

GO可以开多少协程

  • 一个 goroutine 一开始占用4K内存,会受到内存使用量的限制
  • goroutine 是通过系统线程来执行的,golang默认最大的线程数是10000个
  • 理论上内存足够大且 goroutine 不是计算密集型的话,可以开启无限个goroutine

GO多协程控制

  1. 固定个数协程并发处理任务
  • 一般叫做Bounded/Fixed并发控制
  • 优点:简单;缺点:可能流量不均衡
  1. 动态个数协程并发处理任务
  • 解决固定个数协程的缺点,指定一个并发上限,动态修改协程个数
  • 自定义令牌池
    • 令牌池维持 最大允许并发任务数 个令牌,每个任务启动时请求令牌,运行完成返回令牌。
  • 信号量Semaphore实现
    • 令牌池换成信号量
  1. 指定处理速度并发处理任务
  • 借鉴限流器:控制每个时刻最大允许协程数量也达到控制协程数量的目的
  • 自定义令牌池
    • 指定速度生产令牌,每个任务启动时必须请求到令牌
  • 官方限流器
  1. 协程池并发处理任务
  • 推荐:ants

上万的 QPS 策略

  • 水平扩展:增加服务器、增加资源,使用负载均衡来分发请求

  • 数据库优化:优化数据库查询,使用适当的索引和查询优化技术

  • 缓存:使用缓存来存储频繁访问的数据,减少对数据库或其他后端系统的请求

  • 异步处理:将一些耗时的操作转换为异步任务,如使用消息队列来处理后台任务,从而减少请求的响应时间

  • 代码优化:检查应用程序代码,识别并优化性能瓶颈

  • 资源优化:使用监控工具来实时监测系统性能,并根据指标数据进行调优和优化

  • CDN加速:使用内容分发网络(CDN)来缓存和分发静态资源,减轻服务器的负载,提高用户访问速度

  • 降级服务

    • 关闭非关键功能:暂时关闭一些非关键的功能或服务,以减轻系统的负载
    • 限制服务范围:只提供给核心用户或关键业务,暂时不接受其他请求
    • 降低服务质量:降低服务的响应速度或降低服务的容错性,以减少对系统资源的消耗
    • 异常处理:对于异常或错误的请求,可以直接返回错误响应,避免进一步的处理
  • 限流

    • 固定窗口限流: 在固定的时间窗口内,限制处理请求的数量或速率
    • 滑动窗口限流: 根据最近一段时间内的请求情况,动态调整处理请求的数量或速率
    • 令牌桶限流: 基于令牌桶算法,为每个请求分配令牌,只有拥有令牌的请求才能被处理
    • 漏桶限流: 基于漏桶算法,控制请求的流出速率,超过桶容量的请求将被丢弃或延迟处理
  • 熔断:

    • 一种针对服务间依赖关系的保护机制
    • 通过设置阈值来监控系统的负载情况,当系统负载超过预设的阈值时,触发熔断器并暂时停止对该服务的请求

负载均衡

  • 静态负载均衡算法
    • 轮询法

    • 加权轮询法

    • 随机法

    • 加权随机法

  • 动态负载均衡算法
    • 最少连接数法

    • 最短响应时间法

    • 一致性哈希

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值