zoukankan      html  css  js  c++  java
  • Mudo C++网络库第八章学习笔记

    muduo网络库的设计与实现

    • muduo是基于Reactor模式的C++网络库;

    Reactor的关键结构

    • Reactor最核心的是事件分发机制, 即将IO multiplexing拿到IO事件分发给各个文件描述符(fd)的事件处理函数;
    • 每个Channel对象自始至终只负责一个文件描述符(fd)的IO事件分发, 但它并不拥有这个fd, 也不会在析构的时候关闭这个fd;

    TimerQueue定时器

    • 用timerfd给EventLoop加上定时器功能(和处理IO事件相同的方式来处理定时), 这样的代码一致性更好;

    TCP No Delay 和 TCP keepalive

    • TCP No Delay 和 TCP keepalive都是常用的TCP选项, 前者的作用是禁用Nagle算法, 避免连续发包出现延迟, 这对编写低延迟网络服务很重要;
      • TCP keepalive的作用是定期检查TCP连接是否还存在;
      • 如果有应用层心跳的话, TCP keepalive不是必需的;

    高水位回调和低水位回调

    • muduo使用HighWaterMarkCallback和WriteComleteCallback;
    • muduo库的event loop pool由EventLoopThreadPool类表示;
    • muduo库的TcpClient具备TcpConnection断开之后重新连接的功能, 加上Connector具有反复尝试连接的功能, 因此客户端和服务器的启动顺序无关紧要;

    epoll

    • epoll是Linux独有的高效的IO multiplexing机制, 它与poll的不同是:
      • poll每次返回整个文件描述符数组, 用户要遍历数组以找到那些文件描述符上有IO事件;
      • 而epoll_wait返回的是活动fd的列表, 需要遍历的数组通常会小得多;
      • 在并发连接数较大而活跃连接比例不高时, epoll比poll更高效;
  • 相关阅读:
    洛谷 P3521 [POI2011]ROT-Tree Rotations 解题报告
    洛谷 P1640 [SCOI2010]连续攻击游戏 解题报告
    vector-pop_back
    vector-push_back
    vector-push_back
    vector-max_size
    vector-max_size
    vector-insert
    vector-insert
    vector-front
  • 原文地址:https://www.cnblogs.com/longjiang-uestc/p/9842243.html
Copyright © 2011-2022 走看看