Gain 是一个完全用 Go 编写的高性能 io_uring Web框架


Gain 是一个完全用 Go 编写的高性能网络框架。它使用 io_uring——一种新的 Linux 异步 I/O API,由 Facebook 的 Jens Axboe 创建。目前仅支持 Linux。

Gain是一个高性能的 Web 框架,它比用 Go 编写的最快的基于 epoll 的框架更快,因为它构建在 io_uring API 之上。

io_uring 是一种相对较新的 Linux API,用于处理 I/O 操作。出于性能原因,它使用异步编程模型。

io_uring是用户空间和内核共享的一对环形缓冲区。第一个用于发出请求(提交队列或 SQ),第二个用于报告执行结果(完成队列或 CQ)。当用户想要执行某项操作(如读取或写入文件)时,它会创建一个描述所请求操作的提交队列条目,并将其添加到提交队列的尾部。

然后使用系统调用通知内核队列中有要处理的请求。内核尝试完成它必须做的所有工作,并将结果以完成队列事件的形式放在完成队列的尾部。

用户从队列的头部开始一个一个地读取它们。为了减少系统调用的次数,可以在通知内核之前添加多个请求。

io_uring 更高层次的抽象
虽然可以io_uring使用低级接口,但在实际应用程序中会非常痛苦,因此需要更高级别的抽象层。

为了充分利用 的最大优势io_uring,即高性能,我不得不使用一种在实现我的库时不会产生大量性能开销的编程模型。