golang有什么提高性能的设计, 重点说说goroutine

参考解析

题目来源:百度

答案:

  • goroutine
  • channel
  • sync.Pool

goroutine

goroutine: 协程应该可以看作时Go语言的一个特色,一个goroutine只有几kb,通过go关键字就能够直接调用
进而在协程调度切换方面也只占用非常少的资源,且 goroutine 的控制属于用户态。

channel

channel: channel设计的核心思想就时同过通信共享内存,通过合理使用阻塞节省CPU资源。在不同的场景使用两种不同

  • 无缓冲chan:同步控制。
  • 有缓冲chan:异步控制。

sync.Pool

sync.Pool: sync.Pool 设计的初衷是减少GC压力,举个例子:在一个业务中可能需要频繁的New()一个结构体 并使用json 反射到该结构体的字段上。
但是频繁的new 结构体 虽然有GC回收,但是GC回收期间也需要STW,因此使用sync.Pool能够提高程序对内存的复用,进而提高性能。