
源码阅读
文章平均质量分 92
瓜农与花农
我往前飞 飞过一片时间海
展开
-
muduo源码阅读:linux timefd定时器
零轮询编程模型是一种高效处理I/O操作的方法,旨在避免传统轮询(polling)带来的CPU资源浪费。传统的轮询会周期性地检查I/O设备是否准备好进行数据传输,可能导致大量的CPU时间被消耗在无意义的检查上。相比之下,零轮询编程模型利用了操作系统提供的机制(select/poll/epoll等),允许程序在等待I/O事件时进入阻塞状态,即不占用CPU资源,直到有实际的I/O事件发生才会唤醒程序进行处理。这种模型通过减少或消除不必要的检查循环。原创 2025-02-25 22:56:11 · 1041 阅读 · 0 评论 -
muduo源码阅读:socket常见操作及一些补充
读方向:从TCP连接中接收数据的操作。进程从TCP连接中读取来自远端的数据。应用程序正在执行读操作,它是在接收对方发送过来的数据。写方向:通过TCP连接发送数据的操作。进程向TCP连接中写入数据以发送给远端的应用程序。执行写操作时,你是在向对方发送数据。原创 2025-02-23 17:31:22 · 597 阅读 · 0 评论 -
muduo源码阅读:InetAddress类
InetAddress类对IP地址进行包装,是sockaddr_in的包装类。原创 2025-02-23 15:00:03 · 965 阅读 · 0 评论 -
muduo源码阅读:poller的实现
跨线程拷贝是指在一个线程中创建一个对象的副本,并将其传递给另一个线程进行操作。这种方式容易引发数据竞争和其他并发问题(见nocopyable)对象生命周期绑定所属 EventLoop 线程中的对象是什么?对象指的是PollPoller及其相关的 Channel 对象,生命周期是与创建它们的 EventLoop 线程绑定的,这些对象只能在创建它们的那个 EventLoop 线程中被访问和操作。为什么要绑定 EventLoop 线程的生命周期?原创 2025-02-23 11:43:55 · 1276 阅读 · 0 评论 -
muduo源码阅读:epoll底层原理
两个线程同时操作一个socket。用户程序调用epoll_wait后,内核循环检测就绪队列是否有就绪事件,如果有就绪事件,将就绪事件返回给用户,否则继续往下执行,判断epoll是否超时,超时返回0,如果没有超时则将epoll线程挂起,epoll线程陷入休眠状态,同时插入一个epoll等待队列项。当socket接收到数据后,会通过socket等待队列回调函数去检测epoll等待队列项,并将epoll线程唤醒,epoll线程被唤醒成功后,epoll线程再次查询就绪队列,此时就能成功返回socket事件。原创 2025-02-23 11:22:26 · 715 阅读 · 0 评论 -
muduo源码阅读:poll底层实现
poll是一种I/O多路复用机制,可以同时监视多个文件描述符,当其中任意一个文件描述符就绪时,就会通知程序进行相应的读写操作(和select一样)。poll机制与select机制类似,但是poll没有最大文件描述符数量的限制,所以在文件描述符数量较大时,poll的效率会更高。如何实现的的呢?poll引入一个结构体叫pollfd结构体,每个。原创 2025-02-23 11:20:29 · 824 阅读 · 0 评论 -
muduo源码阅读:select底层原理
fd_set;select位图为1024比特位图,通过整型数组模拟而成。select位图每个比特对应一个文件描述符数值。select位图数组长度为16,每个数组元素为8字节,一个字节为8比特,位图大小=16 * 8 * 8 = 1024比特。//设置fd对应位图位置为0。//判断fd对应位图位置是否为1。//设置fd对应位图位置为1。//整个位图清零。select编程select函数是Linux系统中的一种I/O多路复用机制,它可以同时监视多个文件描述符。nfds:最大文件描述符+1。原创 2025-02-23 11:18:49 · 765 阅读 · 0 评论