上一页 1 ··· 7 8 9 10 11 12 13 14 下一页
摘要: 该文章介绍了Go语言中atomic.StoreInt64函数的底层实现。通过汇编指令XCHG来实现原子性地修改存储的值,展示了底层结构对上层建筑的影响。XCHG指令在多线程编程中具有重要作用,但在一些旧计算机上性能不佳。 阅读全文
posted @ 2024-03-30 15:34 pDJJq 阅读(38) 评论(0) 推荐(0)
摘要: LoadInt64函数实际上是通过寻址来获取最新的值,寻址操作的本质即间接引用存储地址。在当前计算机体系下,并发更多是由写操作引起,而读操作通常不存在并发冲突。 阅读全文
posted @ 2024-03-30 15:33 pDJJq 阅读(37) 评论(0) 推荐(0)
摘要: 前言 在atomic中, 常用的有这么几类操作 Add: 增加值 CAS: 比较, 如果old符合预期就替换为new Load: load当前最新的值 Store: 将当前值直接写入到内存中 需要注意的是, 以上操作全部都是原子性的. 对于指令来说, 是不区分类型的, 只区分位数, 而32位只是64 阅读全文
posted @ 2024-03-30 15:28 pDJJq 阅读(15) 评论(0) 推荐(0)
摘要: atomic.AddInt64 介绍 原理 源码 看不到源码解释个勾八原理 源码里只有函数doc, 但是没有函数实现, 但是有一段注释 // AddInt64 atomically adds delta to *addr and returns the new value. // Consider 阅读全文
posted @ 2024-03-29 22:59 pDJJq 阅读(74) 评论(0) 推荐(0)
摘要: golang: 分析查看汇编代码 查看可执行文件 可视化 注意: linux用户需要额外运行go install --tags nowayland loov.dev/lensm@main​ 下载 lensm: go install loov.dev/lensm@main 运行lensm​: lens 阅读全文
posted @ 2024-03-29 22:58 pDJJq 阅读(77) 评论(0) 推荐(0)
摘要: 代码优化 多线程优化 尽量使用顺序读写 因为分支预测的关系, 顺序读写通常能够带来更好的性能. 共享变量 将只读变量和读写变量分离 有可能因为缓存行的原因导致读写变量的更新影响到读变量, 进而影响了运行速度 提升数据的局部性, 将一起使用的读写变量分组到一个结构中 缓存行Padding (谨慎使用) 阅读全文
posted @ 2024-03-29 20:00 pDJJq 阅读(29) 评论(0) 推荐(0)
摘要: NUMA架构是一种多处理器系统内存设计,提供本地内存访问和远程内存访问,用于提高处理器访问内存的速度。在服务器、虚拟化环境、HPC和多线程应用中广泛应用。优化方法包括进程绑定、缓冲池配置和开启NUMA优化功能。 阅读全文
posted @ 2024-03-29 19:58 pDJJq 阅读(215) 评论(0) 推荐(0)
摘要: 虚拟内存使用基址加界限、基于段和基于页等不同方法进行地址转换。基址加界限简单但存在内存浪费,碎片问题;基于段实现内存保护和共享,但存在内部碎片和大小调整问题;基于页是现代操作系统常用的技术,通过页表完成地址映射,避免了段的缺点。 阅读全文
posted @ 2024-03-29 19:57 pDJJq 阅读(186) 评论(0) 推荐(0)
摘要: CPU Cache 架构 每个程序员都应该了解的内存知识.pdf - p22 - 每个程序员都应该了解的内存知识-P22-20240328112647 ​​ 每个程序员都应该了解的内存知识.pdf - p23 - 每个程序员都应该了解的内存知识-P23-20240328112807 ​​ 每个程序员 阅读全文
posted @ 2024-03-29 19:56 pDJJq 阅读(69) 评论(0) 推荐(0)
摘要: 南桥&北桥&内存 结构 每个程序员都应该了解的内存知识.pdf - p5 - 每个程序员都应该了解的内存知识-P5-20240327103419 ​​ 功能 每个程序员都应该了解的内存知识.pdf - p5 - 每个程序员都应该了解的内存知识-P5-20240327104347 ​​ 北桥 主要是连 阅读全文
posted @ 2024-03-29 19:55 pDJJq 阅读(135) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 下一页