初级会员
  • 第 2299 位会员
  • minghaoxi
  • 45005452@qq.com
  • 2015-01-31 10:21:26
  • Offline
  • 0

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 评论了主题 是否值得做对象池?
    gc的回收间隔是2分钟,是否使用对象池的关键就是极限负载情况下, 2分钟内分配的内存会不会导致内存溢出? 如果会,那就需要使用内存池。否则就不需要。内存池本身是有开销。而手动调用gc会严重影响效率 例如tcp udp收包,解包的服务,必须要make byte出来存数据。而make出来的内存只能由gc回收。
  • ReadPacket 方法中 make([]byte, size) 分配的内存不会立即释放,而是由gc进行回收。而gc回收间隔是2分钟。所以,在2次gc回收间隔期间,如果有大量请求发过来,会导致内存飙升。 手动调用gc会严重拖慢性能,建议使用sync.Pool 内存池管理内存分配。
  • go 全部是静态链接编译的。这样的好处是发布方便,发布机器不用安装任何依库
  • 评论了主题 写Go用什么IDE比较好?
    liteide 很好用。 go本身的环境已经很方便了,ide的主要目的也就是图个代码自动匹配功能,在大型项目中可以节省很多时间
  • 1.会复制的,但go的栈会建立内存池,重复的栈内存申请会从内存池中进行分配,避免从系统申请提高效率。但总的内存使用量会较大,可用使用指针定义避免复制,但会引入新的问题,如果chan 数组很大的话,大量指针对象会导致gc效率过低的问题,所以不建议在数组或MAP中使用指针 2.gc 不用的chan 会有gc 进行内存回收,不会有问题。 3.go 里没有 iterator,你代码列出的这个应用场景相比c 有性能耗损。在map value里放指针可以解决这个问题,但会引入新的问题就是gc效率问题。 最后 : go 不是 c 相比 c语言是有些缺点的,比如不支持手动gc 导致你提到的问题 1 和3 。 总体来说有点内存换效率的意思。 如果go的优点不足以吸引你,那c 还是最佳选择。