探究 Go 语言 defer 语句的三种机制
Golang 的 1.13 版本 与 1.14 版本对 `defer` 进行了两次优化,使得 `defer` 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 `defer` 各加入了一项新的机制,使得 `defer` 语句在编译时,编译器会根据不同版本与情况,对每个 `defer` 选择不同的机制,以更轻量的方式运行调用。 ### 堆...
51工具盒子
Golang 的 1.13 版本 与 1.14 版本对 `defer` 进行了两次优化,使得 `defer` 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 `defer` 各加入了一项新的机制,使得 `defer` 语句在编译时,编译器会根据不同版本与情况,对每个 `defer` 选择不同的机制,以更轻量的方式运行调用。 ### 堆...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 **3...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 微软常...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 微软常...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 微软常...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 微软常...
该运行库合集以前是由睿派克技术论坛制作,后由Dreamcast接盘更新,文中安装包来自[Dreamcast](http://dreamcast2.ys168.com/),本文为了方便博主下载,所以留存了一份下载地址。 运行库是装机必备的软件之一,很多软件程序都是基于这些库运行的。例如:windows server服务器上如果想要运行php,就必须得安装这个库才可以。 微软常...
前一篇文章中我们讨论了 C++ 中原子变量的内存顺序, 现在我们来看看原子变量和内存顺序的应用 -- 无锁队列. 本文介绍单写单读和多写多读的无锁队列的简单实现, 从中可以看到无锁数据结构设计的一些基本思路. 何谓无锁 {#何谓无锁} ------------ 为了实现一个线程安全的数据结构, 最简单的方法就是加锁. 对于队列来说, 应该对入队和出队操作加锁. |----...
C++11 将多线程纳入了标准. 一旦涉及到多线程, 就需要考虑**并发** , **数据竞争 (date race)** , **线程同步** 等问题, 为此 C++ 提供了互斥锁 `std::mutex`, 原子变量 `std::atomic` 等标准库. 对于原子变量的操作, 有一个很重要的概念就是**内存顺序 (memory order)**, 其中涉及到的概念很多, ...
C++ 用关键字 `const` 标识一个类型不可变. 这其实很容易理解. 不过, 对于 C++ 而言, 简单的概念也有很多可以讨论的. 我们来看一个问题. ### 问题 {#问题} 我们知道 `const` 可以用于修饰成员函数, 标识这个函数不能修改这个类的数据. 假设一个类有一个指针类型的成员 `T *p`, 我们希望通过 `get()` 方法获取 `p` 所指向的对...