等疾风

正在捣鼓协程

等疾风

原作者:Jens Axboe

原文:github.com/axboe/liburing/wiki/io_uring-and-networking-in-2023

译者:等疾风

(本翻译已获得原作者授权。未经译者允许,请勿转载。)

介绍

作为一个 IO 模型,io_uring 既适用于存储,也适用于网络。在 UNIX 中,人们经常吹捧“一切皆文件”。多数情况下这是对的,然而,一旦你需要对文件做 IO,所有的文件就不再众生平等,而是必须被区别对待。

Read more »

前言

重要数据·务必备份!固态硬盘报废,连带 Linux 无了,只能重装。恐将来也会频繁装机,故写一篇笔记,希望一劳永逸。

Read more »

co_context 是最近开发的 C++ 异步协程框架,基于 Linux io_uring。「易用性」和「性能」是我们最重视的属性,这篇文章,我们介绍在 co_context 中有关易用性的设计。

Read more »

co_context 是最近开发的 C++ 异步协程框架,以易用性为最高目标,尽量兼顾性能。希望从此 C++ 的异步能比 Node.js 更简单,更优雅。

co_context 是基于 Linux io_uring,I/O 走内核态协议栈,这是 co_context 努力逼近的性能上限。

Read more »

最近开发 co_context,遇到了很多 C++ 周边的坑。其中一个坑是 intellisense 翻脸不认 C++17 标准的强制拷贝消除(Mandatory elision of copy/move operations)。

这个 intellisense 来自 Vscode Extention: C/C++ (Microsoft)。

Brief Solution

1
2
3
4
5
#ifdef __INTELLISENSE__
// The fake code to cheat intellisense...
#else
// The real code for compiler...
#endif
Read more »

Preface

要掌握 C++20 协程,仅仅看完文档是远远不够的。C++ 和其他语言的协程的最大不同点在于,C++ 提供了最少量的编译器实现和极大量的「可定制点」,而其他语言可能连「调度器」都给用户准备好了。

在茫茫多的可定制点面前,如果你能一眼看出「为什么 C++ 要这样设计」,那么我愿称你为天才。否则,还是从常见的范式下手,逐渐体会设计者的思想吧。

我们将从最简单的范式——Generator 下手。

Read more »

1
2
3
4
5
6
7
template<typename Lambda>
struct Defer : Lambda {
~Defer() { Lambda::operator()(); }
};

template<typename Lambda>
Defer(Lambda) -> Defer<Lambda>;
1
2
3
4
// usage
Defer guard{[sockfd]{
shutdown(sockfd, SHUT_WR);
}};
Read more »

Preface

在研究 CRTP 时发现了一种经典应用——表达式模板。今天学一学,顺便水一篇博客。🐶

Motivation and example

表达式模板是一种模板元编程,它在编译期展开向量的一系列复合运算,从而将辅助空间从 $O(n)$ 降到 $O(1)$。相比于朴素算法,表达式模板属于惰性求值,求值时间点是赋值运算。

Read more »

Preface

「多态」是一个很宽泛的理念,对应繁多实现。本文将记录我所看到的多态的各种形态。作者见识短浅,还请读者多多指教。

  • 本文已计划的内容:
    • 基于 std::visit
      • 实现运行时多态的优化
      • 实现重载模式
    • CRTP 实现静态多态
      • 静态多态
      • 静态接口
      • CRTP 的一些分析和 trick
    • C++20 前基于 SFINAE 的模板偏特化
    • C++20 后基于 concepts 的模板特化
    • Hack 虚函数表,用于优化
      Read more »