godebug

Go 1.15 正式发布

…衆ロ難τιáo~ 提交于 2021-02-17 06:53:49
就在昨天,也就是2020年8月11日,go开发团队发布了go最新版本1.15。该版本在 1.14 的基础上继续改进工具链、运行时和库。也保留了GO1兼容性的承诺。这几乎保证所有的go程序都能像以前那样的正常编译与运行。并且在Go 1.15中对链接器也有重大改进,改进了对具有大量内核的小对象的分配,并弃用了 X.509 CommonName。GOPROXY 现在支持跳过返回错误的代理,并添加了新的嵌入式 tzdata 包。 编译器 包 unsafe 的安全规则允许在调用某些函数时将 unsafe.Pointer 转换为 uintptr 。以前,在某些情况下,编译器允许进行多次链接转换(例如 syscall.Syscall(…uintptr(uintptr(ptr)), …) )。现在,编译器只需要一次转换。使用多次转换的代码应进行更新以满足安全规则。与 Go 1.14 相比,Go 1.15 通过消除某些类型的 GC 元数据并更积极地消除了未使用的类型元数据,与 Go 1.14 相比将典型的二进制大小减少了大约5%。该工具链现在通过将函数与 32 字节边界对齐并填充跳转指令来缓解 GOARCH=amd64 上的 Intel CPU 勘误 SKX102 。尽管此填充增加了二进制大小,但这远远超出了上述二进制大小改进所弥补的范围。Go 1.15在编译器和汇编器中都添加了一个标志

Go 语言编程 — 并发

*爱你&永不变心* 提交于 2020-08-10 06:19:21
目录 文章目录 目录 并发和并行 如何交互?CSP 通信模型 如何调度?MPG 调度模型 用户级线程模型(多对一) 内核级线程模型(一对一) 两级线程模型(多对多) MPG 线程模型 Go Runtime Scheduler G-M 锁定 使用 GODEBUG 查看 Go Runtime Scheduler 的状态信息 并发和并行 并发和并行的目的都是为了充分利用 CPU 的多核(多处理器)架构,但两者却有着本质的区别。 并发 :在同一 时间段内 ,多条指令在 CPU 上执行。 并行 :在同一 时刻内 ,多条指令在 CPU 上执行。 并发程序 并不要求 CPU 具备多核计算能力,只要求多个线程在同一个 Core 上进行 “分时轮询” 处理。可以在宏观上实现多线程同时执行的效果。并发程序的执行通常是不确定的,这种不确定性来源于资源之间的相关依赖和竞态条件,可能导致执行的线程间相互等待,使并发程序即使在多核环境上也无法做到真正并行执行而降级为串行执行。简而言之,并发程序通常是有状态的( 非幂等性 )。 并行程序 则要求 CPU 具备多核计算能力,在同一时刻内,多个线程分别在不同的 Core 上同时执行。并行程序的每个执行模块在逻辑上都是独立的,即线程执行时可以独立地完成任务,从而做到同一时刻多个指令能够同时执行。并行程序通常是无状态的( 幂等性 )。 综上可知,我们在 Golang