摘要:
分享、持续学习,加油 ! 阅读全文
分享、持续学习,加油 ! 阅读全文
posted @ 2019-03-15 14:33
GJH-
阅读(9529)
评论(0)
推荐(2)
在 Go 语言中,内存逃逸分析是编译器的一项重要功能。变量的内存分配位置对程序性能有着重要影响。通常,栈内存的分配和释放速度比堆内存快。如果一个变量在函数调用结束后不再被使用,将其分配在栈上是高效的;但如果函数返回后,该变量依然被其他部分引用,那么它就需要被分配到堆上,这一过程就称为内存逃逸。 内存 阅读全文
在垃圾回收领域,常见算法有标记清除(Mark - Sweep)和引用计数(Reference Count),Go 语言采用的是标记清除算法,并在此基础上借助三色标记法和写屏障技术提升效率。 标记清除算法基础 标记清除收集器属于跟踪式垃圾收集器,执行过程分为标记(Mark)与清除(Sweep)两个阶段 阅读全文
报错 解决 修改 go20\src\syscall\types_windows.go 加入一下代码 /** 找到此位置添加如下 */ 16: "SIGUSR1", 17: "SIGUSR2", 18: "SIGTSTP", } /** 兼容windows start */ func Kill(... 阅读全文
并发 Go中map默认不安全的,也实现了并发安全的对象:sync.Map 和Java的HashMap一样,并发安全的是:ConcurrentHashMap 并发不安全 不安全是因为源码中没有实现读写分离。进行了判断异常: 在哈希表写操作时,会将哈希表的标志位 hashWriting 设置为 1,以表 阅读全文
介绍 Trie(字典树)是一种用于高效存储和查找字符串的数据结构。 Go语言标准库中没有提供Trie树的实现,但是可以使用第三方包来实现Trie树。 下面是Trie的使用方法: 创建Trie树:首先需要创建一个Trie树的根节点,根节点不存储任何字符,只是作为一个起始点。 插入字符串:将字符串中的每 阅读全文
查看Go的不同版本:https://go.googlesource.com/go/+refs 源码位置src/runtime/slice.go :func growslice(xxx) 1.18之前 如果原Slice容量小于1024,则新Slice容量将扩大为原来的2倍; 如果原Slice容量大于等 阅读全文
用户态线程 GMP 在1.2版本之前是没有p的概念的 只有 MG Go 语言基于 GMP 模型实现用户态线程(协程) G:表示 goroutine,每个 goroutine 都有自己的栈空间,定时器初始化的栈空间在 2k 左右,空间会随着需求增长。 M:表示 Machine,抽象化代表内核线程,记录 阅读全文
在 Golang 中接口(interface)是一种类型,一种抽象的类型。接口(interface)是一组函数 method (方法)的集合,Golang 中的接口不能包含任何变量。 在 Golang 中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序设计 阅读全文
互斥锁是并发程序中对共享资源进行访问控制的主要手段,Go提供了Mutex(互斥锁)结构体类型 并且使用简单:对外暴露两个方法 Lock() 和 Unlock() 分别用于加锁和解锁 1.Mutex使用 开启10个Goroutine来计算count的结果 package main import ( " 阅读全文