美文网首页程序员GOLANG后端架构
golang下的并发、并行优化

golang下的并发、并行优化

作者: imnx | 来源:发表于2018-12-06 15:31 被阅读30次

GO语言是非常适合高并发场景的,那么,业务系统具体会遇到哪些高并发的场景呢?该如何考虑性能开销呢?那么本文就笔者在业务系统常常遇到的问题来抛砖引玉~

请求合并

这是什么场景呢?回源!回源DB,二进制流回源源站等等~高并发的场景下,大量用户访问同一个对象,那么做请求合并可以节省非常可观的资源,singleflight~当然这是进程内的用法。

批量协议

好像和请求合并有点像?不太一样。比较经典的case就是redis的pipeline。能批量就批量,减少太多的封包解包,减少cpu和带宽~

merge请求

额~~merge什么?比如一个视频id更新计数,那么9->18->25......对了,计数从1涨到100,难道我要写100次db吗?很明显,可以内存里merge~~

并行请求

这个用法在网关服务就非常常见啦~当你的服务需要聚合A、B、C这3个系统的数据,而A、B和C之间没有依赖,那么完全可以并行请求。golang里常用errgroup去实现。

减少锁以及系统调用

        有些情况锁是很难避免的,但是可以通过一些锁粒度拆分优化去减少锁的开销。系统调用对cpu的开销都是挺明显的,具体可以压测查看top,us%的开销在90%以上,说明性能优化还是可以的。

序列化协议,json和pb

        这里既包括API的协议,也同时包括缓存对象的序列化协议。缓存的访问常常会几倍于api请求,经常有放大,所以更要重视。

异步处理,使用channel,而不是无限制go func()

        比如更新缓存的场景。这点挺容易理解,无限制的goroutine会带来大量的context切换,浪费cpu。当然channel的长度要做限制和监控。消费者goroutine数可以适当配置。


相关文章

  • golang下的并发、并行优化

    GO语言是非常适合高并发场景的,那么,业务系统具体会遇到哪些高并发的场景呢?该如何考虑性能开销呢?那么本文就笔者在...

  • Golang对象复用静态代码检查工具

    一、对象复用 在高并发的场景下使用golang,优化GC都会无法回避的问题。搜索「golang 垃圾回收优化」出来...

  • Golang并发调度模型解析

    学习golang,必然绕不开并行与并发这样的概念,作为golang的一大卖点,轻量级的协程应该是我们要理解的,包括...

  • 进程线程,并发并行区别

    并发和并行的区别: 先解释一下并发和并行:并发:cpu具有处理多个任务的能力并行:cpu具有同时处理多个任务的能力...

  • shell并发,并行

    简介 首先明确,程序在执行的时候是串行执行的,那么在程序执行中往往可以利用并发和并行来优化 那么并发和并行的区别是...

  • jvm总结

    讲jvm之前先明确下串行、并行、并发的区别: 并行(Parallel): 必须多核支持 并发 (Concurren...

  • GCD介绍

    本文罗列一下GCD基础知识。 并行和并发 在英文世界里,并行 和 并发 的区别比较清晰,并行 对应 paralle...

  • 说说Golang goroutine并发那些事儿

    摘要:今天我们一起盘点一下Golang并发那些事儿。 Golang、Golang、Golang 真的够浪,今天我们...

  • Go语言学习笔记19.并发编程

    前置知识点:(如果不了解建议百度下再学并发编程) 并发、并行,同时进行叫并行,交替进行叫并发(时间片轮循)。 进程...

  • 服务器并发设计

    并发与并行 并发技术选型 结构并发 状态并发 集群和负载均衡 并发(Coccurrency)和并行(Paralle...

网友评论

    本文标题:golang下的并发、并行优化

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