最新内容

高性能异步io机制:io_uring

io_uring 是 linux 内核 5.10 引入的异步 io 接口。相比起用户态的DPDK、SPDK,io_uring 作为内核的一部分,通过 mmap 的方式实现用户和内核共享内存,并基于 memory barrier 在这块内存上实现了两个无锁环形队列: submission queue ring(sq) 和 completion queue ri …

深入学习IO多路复用select/poll/epoll实现原理

Linux 服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。0. 结论本文其他的内容主要是得出了下面几个结论:服务器要接收客户端的数据,要建立 socket 内核结构,主要包含两个重要的数据结构,(进程)等待队列,和(数据)接收队列,socket在进程中作为一个文件,可以用文件描述符 fd 来表示,为了方便理解 …

图解Linux poll机制,终于集齐IO复用三剑客(精华篇)

前言:前面几篇文章已经详细讲解了Linux select和epoll机制,select和epoll两种IO复用方式用的人比较多,就像一家人一样,epoll相当于大哥,select相当于弟弟,而poll相当于二哥,家里的老二通常是很容易被忽视的对象,poll这种IO复用方式也很容易被忽视。epoll机制效率高,适用于高并发场景,所以epoll机制广泛用于各种开 …

linux网络编程epoll模型

Linux网络编程--epoll 模型原理详解以及实例1.简介Linux IO多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络IO性能的新方法,即epoll 。 epoll是什么?按照man手册的说法是为处理大批量句柄而作了改进的poll。要使用epoll只需要以下的三个系统函数调用: epo …

「干货」IO多路复用技术(select、poll、epoll模型)

目前常用的IO复用模型主要有三种:selectpollepoll首先这三种都是实现IO多路复用的方式;IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,他就通知该进程。与多线程技术相比,IO多路复用最大的优势是系统开销小,系统不必创建核维护这些线程、进程,从而大大的减少系统的开销。1.select模型时间复杂度为O(n),有IO事件发生了, …

Redis不是号称单线程效率也很高吗,为什么又采用多线程了?

Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型。因为我们公司使用的内存数据库是自研的,按理说我对Redis的关注其实并不算多,但是因为Redis用的比较广泛,所以我需要了解一下这样方便我进行面试。总不能候选人用过Redis,但是我非要问人家阿里的Tair是怎么回事吧 …

2022通俗易懂Redis的线程模型看完就会

Redis真的是单线程吗?我们一般说Redis是单线程,是指Redis的网络IO和键值对操作是一个线程完成的,这就是Redis对外提供键值存储服务的主要流程。Redis的其他功能,例如持久化、异步删除、集群数据同步等等都是由额外的线程去做的。当我们说“Redis是单线程高性能的存储”的时候,无非是说法上感觉比较酷。Redis为啥用单线程?由于Redis是基于 …

新一代异步IO框架 io_uring

1 Linux IO 模型分类相比于kernel bypass 模式需要结合具体的硬件支撑来讲,native IO是日常工作中接触到比较多的一种,其中同步IO在较长一段时间内被广泛使用,通常我们接触到的IO操作主要分为网络IO和存储IO。在大流量高并发的今天,提到网络IO,很容易想到大名鼎鼎的epoll 以及reactor架构。但是epoll并不属于异步IO …

网络编程 | 彻底搞懂网络 IO 模型

令人头大的 IO说起网络 IO 相关的开发,很多人都头大,包括我自己,写了几年的代码,对 IO 相关的术语说起来也是头头是道,什么 NIO、IO 多路复用等术语一个接一个。但是也就自己知道,这些概念一团乱,网上各种各样的文章也没一个权威易懂的,并且很多文章说起 IO 就扯上 Java 的 NIO 包,专注的大多是如何使用(术)而不是 IO 的本质(道)。所以 …

Linux中的五种I/O模型分析

无论是用GPIO来读取,还是用中断的方式,其应用程序通过循环读取的方式获取按键值,都会使CPU的占用率很高。无论是用GPIO来读取,还是用中断的方式,其应用程序通过循环读取的方式获取按键值,都会使CPU的占用率很高。本篇先来介绍Linux中几种的IO模型,以后使用这类方式进行按键值的读取,可以极大降低CPU的使用率。1 Linux中的IO模型这里以网络IO为 …