IT书架 本次搜索耗时 0.200 秒,为您找到 1106 个相关结果.
  • 4.Go channel为什么是线程安全的?

    4.Go channel为什么是线程安全的? 为什么设计成线程安全? 如何实现线程安全的? 4.Go channel为什么是线程安全的? 为什么设计成线程安全? 不同协程通过channel进行通信,本身的使用场景就是多线程,为了保证数据的一致性,必须实现线程安全 如何实现线程安全的? channel的底层实现中,hchan结构体中采用M...
  • 7.Go channel发送和接收什么情况下会死锁?

    7.Go channel发送和接收什么情况下会死锁? 7.Go channel发送和接收什么情况下会死锁? 死锁: 单个协程永久阻塞 两个或两个以上的协程的执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞的现象。 channel死锁场景: 非缓存channel只写不读 非缓存channel读在写后面 缓存channel写入超过缓冲...
  • 4.Go map如何查找?

    4.Go map如何查找? # 查找流程 4.Go map如何查找? Go 语言中读取 map 有两种语法:带 comma 和 不带 comma。当要查询的 key 不在 map 里,带 comma 的用法会返回一个 bool 型变量提示 key 是否在 map 中;而不带 comma 的语句则会返回一个 value 类型的零值。如果 value...
  • 适配器模式

    适配器模式 1.1 模式动机 1.2 模式定义 1.3 模式结构 1.4 时序图 1.5 优点 1.6 缺点 1.7 适用环境 1.8 模式应用 1.9 模式扩展 1.10 Go语言实现 adapter.go adapter_test.go 1.11 总结 适配器模式 1.1 模式动机 在软件开发中采用类似于电源适配器...
  • 7.Go map如何扩容?

    7.Go map如何扩容? 7.Go map如何扩容? 扩容时机: 在向 map 插入新 key 的时候,会进行条件检测,符合下面这 2 个条件,就会触发扩容 if ! h . growing () && ( overLoadFactor ( h . count + 1 , h . B ) || tooManyOverfl...
  • 3.Go 内存对齐机制?

    3.Go 内存对齐机制? 什么是内存对齐 对齐系数 优点 缺点 结构体对齐 3.Go 内存对齐机制? 什么是内存对齐 为了能让CPU可以更快的存取到各个字段,Go编译器会帮你把struct结构体做数据的对齐。所谓的数据对齐,是指内存地址是所存储数据大小(按字节为单位)的整数倍,以便CPU可以一次将该数据从内存中读取出来。 编译器通过在...
  • 5.Go map冲突的解决方式?

    5.Go map冲突的解决方式? 5.Go map冲突的解决方式? 比较常用的Hash冲突解决方案有链地址法和开放寻址法: 链地址法 当哈希冲突发生时,创建新单元 ,并将新单元添加到冲突单元所在链表的尾部。 开放寻址法 当哈希冲突发生时,从发生冲突的那个单元 起,按照一定的次序,从哈希表中寻找一个空闲的单元,然后把发生冲突的元素存入到该单...
  • 2.Go 有哪些并发同步原语?

    2.Go 有哪些并发同步原语? 原子操作 Channel 基本并发原语 sync.Mutex sync.RWMutex sync.WaitGroup sync.Cond sync.Once sync.Pool sync.Map sync.Context 扩展并发原语 ErrGroup Semaphore Sing...
  • 6.Go map 的负载因子为什么是 6.5?

    6.Go map 的负载因子为什么是 6.5? 6.Go map 的负载因子为什么是 6.5? 什么是负载因子? 负载因子(load factor),用于衡量当前哈希表中空间占用率的核心指标 ,也就是每个 bucket 桶存储的平均元素个数。 负载因子 = 哈希表存储的元素个数/桶个数 1 复制代码 另外负载因子与扩容、迁...
  • 5.Go GC如何调优?

    5.Go GC如何调优? 5.Go GC如何调优? 控制内存分配的速度,限制 Goroutine 的数量,提高赋值器 mutator 的 CPU 利用率(降低GC的CPU利用率) 少量使用+连接string slice提前分配足够的内存来降低扩容带来的拷贝 避免map key对象过多,导致扫描时间增加 变量复用,减少对象分配,例如使用 sync.P...