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

  Z9KOrx4bDlAX   2024年03月27日   55   0   0 C++

早在C11就在STL中引入了原子操作支持了。大部分时候,我使用C11的atomic仅仅是为了原子地操作特定的一个变量,比如load、store、fetch_add等等。然而实际上,C11的原子操作带着的memoryorder还能起到memorybarrier的作用。本文会从头介绍C11原子变量的用法,使用的注意事项以及一些原理,原理部分会涉及少量的计算机体系结构的知识,主要与CPU的缓存相关。 原子操作 原子性 原子操作指的是要么处于已完成的状态,要么处于初始状态,而不存在中间状态的操作。例如,假设下面的函数满足原子性(它实际上不满足原子性,但我们假设它满足): intvalue=0; voi...

  Z9KOrx4bDlAX   2023年11月02日   63   0   0 C++

这是我阅读RayTracingGem的一篇笔记,《避免自相交的快速可靠的方法》是RayTracingGem的第六章。这篇博客文章主要是为了记录和解释原文末尾给出的魔法一般的代码。 浮点误差 数学上给出了很多不同的求解光线与几何体相交的方法,它们都是等价的,但对于计算机而言并不一定。由于浮点数带来的浮点误差,不同方法带来的结果可能天差地别。 通常来讲,浮点数越大,其相对应的误差也就越大,这不难理解。IEEE754单精度浮点数由1位符号位、8位阶码以及23位尾数组成。浮点数的数量级主要是由阶码决定的,因为阶码的增减会以指数级别影响浮点数的大小。所以,如果一个浮点数的数量级越大,其阶码就越大,那么尾...

  Z9KOrx4bDlAX   2023年11月02日   38   0   0 计算机图形学

这是我阅读General-PurposeGraphicsProcessorArchitecture的一篇笔记,本文对应书中第二章的内容。 执行模型 现代GPU普遍采用SIMD来实现数据级(data-level)并行,程序员通过诸如CUDA等API以在GPU上启动一系列的线程(thread)执行工作。其中,每个线程可以有独立的执行路径(executionpath),并且可以访问不同区域的内存。从硬件的角度看,GPU会将线程分成若干组,每个组被称为一个warp(在AMD的术语中称为wavefront)以利用线程的规律性和空间局部性。这种执行模型被称为SIMT(single-instruction,...

  Z9KOrx4bDlAX   2023年11月02日   41   0   0 其他技术区
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~