现代 CPU 一般都是有多级缓存的,越靠近 CPU 的缓存越快也越小。CPU 缓存层数并不固定,通常是三层,因此这里以三层缓存的典型 hierarchy 来进行叙述。

CPU 的三层缓存我们称之为 L1,L2 和 L3 cache,也被称为一/二/三级缓存。其中:

  • L1 和 L2 cache 为每个核特有,L1 缓存是最小最快的缓存。
  • L3 为单个插槽上的所有 CPU 核心共享。
  • 主存保存这程序运行的所有数据,相比较 L1/L2/L3 而言,更大更慢,由所有插槽上的所有 CPU 核心共享。
Read more »

Vercel 之前叫 ZEIT ,是著名的 Guillermo Rauch 发起的静态网站 hosting 服务。Verel 自己有智能 DNS 服务和 边缘节点加速。免费的方案提供一个月 100GB 的流量 和 100h 的构建时间,对个人博客非常合适了。

Vercel

现在通过站长工具可以看到,GitHub Pages 的博客在大陆地区访问速度很差,这我还是挂在 Cloudflare 经过 CDN 加速的,实际 Cloudflare 的 CDN 加速效果很多时候还不如没有。

Read more »

When you first start exploring the .NET technology, you may feel just as overwhelmed as I did with terms like .NET Framework, .NET Core, .NET 5, and a plethora of other concepts such as Mono, Xamarin, and ASP.NET showing up when you open Visual Studio. This article aims to help you gain a basic understanding of these technologies and make sense of the jargon.

Read more »

动机

博客使用 Hexo 搭建,体验一直还是不错的,不过最近碰到个问题,Hexo 生成的文章 url 的格式是 /year/month/day/title ,网上一些说法是说对太长的 url 对 SEO 不利。

Hexo
Read more »

什么是 memory reordering

在阐述 memory reordering 之前,首先需要声明的一点是:

memory reordering 本身和多线程没有必然联系,无论保持何种 memory order ,均只是对程序的底层执行进行优化(优化包括编译器和 CPU 两个环节)来提高运行速度,而绝不会改变单线程程序执行的最终结果。只是在实际实践的过程中往往会使用 memory reordering 的特性来保证多线程操作时的线程安全而已。所谓 memory reordering,本质上就是编译器和 CPU 对单线程中指令执行顺序进行的优化。

memory reordering 涉及到各语言编译器的具体实现以及硬件平台的设计。memory reordering 本质上其实可以简单分为三种:

  • relaxed ordering:最弱的内存模型。
  • acquire-release ordering:遵循 acquire and release semantics 的内存模型。
  • sequential consistent ordering:连续一致性模型,没有任何 memory reordering 的可能,下文简称 SC。

三种模型从上往下,依次加强。硬件平台和各语言实现中按内存模型的强弱可以划分如下:

Read more »

guava 是谷歌官方一个著名的 Java 类库,增加了很多 feature ,很多都被官方借鉴。我在使用 guava 提供的 future 的时候,发现了 MoreExecutor#directExecutor 这个方法。对这个方法的理解产生了一些疑问。

Read more »

最近一些内部开发的 Git Repository 需要开始做对外披露了,回想起当初测试时可能曾经把一些敏感信息给提交到 git 里了,尽管最后一次提交已经把敏感信息删除了,但是中间的提交历史是包含敏感信息的,因此不能直接把代码丢出去了,但是 git 的提交记录我还是想要保留的,这就成了一个问题了。当然最后还是成功解决了,所有的操作都是直接使用 git 命令完成的,特此记录一下。

Read more »
0%