Hello, world!

使用C++20协程和io_uring优雅地实现异步IO


距离2020年已经过去很久了,各大编译器对于C++20各项标准的支持也日趋完善,无栈协程也是其中之一,所以我就尝试着拿协程与io_uring实现了一下proactor模式,这篇文章用来记录一下我的设计和想法。除此之外,我们能在网络上找到许多优秀的C++20协程的教程以及许多优秀的协程应用(库),但从协程入门到架构出成熟的应用(库)之间还存在着不小的鸿沟,而直接去啃大型工程的源代码绝对不算是一种高效率的学习方式。所以,如果这篇文章能够在这方面提供一定的帮助的话那就再好不过了。

正如上所述,这篇文章是介绍基于C++20协程实现异步IO的,而不是介绍C++20协程的,因此有一定的阅读门槛。在阅读之前,你应当至少熟悉一下C++20协程。

Read more ⟶

C++的异常处理究竟有多慢?


我们能在各处看到“C++的异常很慢,不要用”这样的言论,不过很少有人告诉你,C++的异常到底有多慢,以及它为什么这么慢。本文会详细介绍C++在抛出以及捕获异常时,代码到底做了什么,以及我们使用C++异常到底付出了多少代价。

Read more ⟶

GPU通用计算编程模型


这是我阅读General-Purpose Graphics Processor Architecture的一篇笔记,本文对应书中第二章的内容。

Read more ⟶

从零开始的D3D12渲染框架 第0篇 设计思路


DirectX 12、Vulkan等下一代的渲染API在设计上相比OpenGL等上一代API有了很大的不同。下一代渲染API暴露了更多的GPU相关的细节部分,这允许程序员对GPU进行更加细致的控制,但同时也使得API本身变得更加琐碎与难用。这一系列文章用来记录我封装DirectX 12的思路与心得,篇章之间不会有很强的关联性。

Read more ⟶

浅析C++ Atomic


早在C++11就在STL中引入了原子操作支持了。大部分时候,我使用C++11的atomic仅仅是为了原子地操作特定的一个变量,比如loadstorefetch_add等等。然而实际上,C++11的原子操作带着的memory order还能起到memory barrier的作用。本文会从头介绍C++11原子变量的用法,使用的注意事项以及一些原理,原理部分会涉及少量的计算机体系结构的知识,主要与CPU的缓存相关。

Read more ⟶

在光线追踪中避免自相交的方法


这是我阅读 Ray Tracing Gem 的一篇笔记,《避免自相交的快速可靠的方法》是 Ray Tracing Gem 的第六章。这篇博客文章主要是为了记录和解释原文末尾给出的魔法一般的代码。

Read more ⟶