golang
文章平均质量分 84
mojolang
精品驿站
展开
-
高频golang面试题:简单聊聊内存逃逸?
问题知道golang的内存逃逸吗?什么情况下会发生内存逃逸?怎么答golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。否则就说它逃逸了,必须在堆上分配。能引起变量逃逸到堆上的典型情况:在方法内把局部变量指针返回局部变量原本应该在栈中分配,在栈中回收。但是由于返回时被外部引用,因此其生命周期大于栈,则溢出。 发送指针或带有指针的值到 channel 中。在编译时,是没有办法知道哪个 goroutine...转载 2021-04-21 17:18:07 · 319 阅读 · 0 评论 -
图解Go语言内存分配(面试重点,讲的很详细)
图解Go语言内存分配Stefno「码农桃花源」计算所研究生,滴滴高级后端工程师287 人赞同了该文章Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。核心思想就是把内存分为多级管理,从而降低锁的粒度。它将..转载 2021-04-21 16:19:04 · 1910 阅读 · 0 评论 -
GO 语言系统调用简析
一、系统调用概述系统调用是受控的内核入口,借助于这一机制,进程可以请求内核以自己的名义去执行某些动作。Linux 内核以 C 语言语法 API 接口形式(头文件),提供有一系列服务供程序访问。可以通过 man 2 syscall 查看系统调用信息。关于系统调用,需要注意以下几点:1、系统调用将处理器从用户态切换到核心态,以便 CPU 访问受到保护的内核内存;2、系统调用的组成是固定的,每个系统调用都由一个唯一的数字来标识;3、每个系统调用可辅之以一套参数,对用户控件(进程虚拟地址控件)与内核空转载 2021-04-01 10:51:59 · 816 阅读 · 0 评论 -
实战Go内存泄露
最近解决了我们项目中的一个内存泄露问题,事实再次证明pprof是一个好工具,但掌握好工具的正确用法,才能发挥好工具的威力,不然就算你手里有屠龙刀,也成不了天下第一,本文就是带你用pprof定位内存泄露问题。关于Go的内存泄露有这么一句话不知道你听过没有:10次内存泄露,有9次是goroutine泄露。我所解决的问题,也是goroutine泄露导致的内存泄露,所以这篇文章主要介绍Go...转载 2019-12-03 10:03:39 · 1581 阅读 · 0 评论 -
Go条件变量适应场景及详解
条件变量条件变量(conditional variable),和互斥锁一样,也是一个同步工具。我们常常会把条件变量与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥作用。作用条件变量并不是被用来保护临界区和共享资源的,它是用于协调想要访问共享资源的那些线程的。当共享资源的状态发生变化时,它可以被用来通知被互斥锁阻塞的线程。使用条件变量的最大优势就是在效率方...转载 2019-10-13 17:22:57 · 1078 阅读 · 0 评论 -
Go语言 GC优化经验分享
不想看长篇大论的,这里先给个结论,go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。想知道如何提前预防和解决问题的,请耐心看下去。我们项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠me...转载 2019-05-09 11:32:11 · 1064 阅读 · 0 评论