TinyWebServer
1.一文读懂社长的TinyWebServer
为提高效率,我们将在这部分通过线程池来实现并发(多线程并发),为每个就绪的文件描述符分配一个逻辑单元(线程)来处理。
Linux下有三种IO复用方式:epoll,select和poll,为什么用epoll,它和其他两个有什么区别呢?
-
对于select和poll来说,所有文件描述符都是在用户态被加入其文件描述符集合的,每次调用都需要将整个集合拷贝到内核态;epoll则将整个文件描述符集合维护在内核态,每次添加文件描述符的时候都需要执行一个系统调用。系统调用的开销是很大的,而且在有很多短期活跃连接的情况下,epoll可能会慢于select和poll由于这些大量的系统调用开销。
-
select使用线性表描述文件描述符集合,文件描述符有上限;poll使用链表来描述;epoll底层通过红黑树来描述,并且维护一个ready list,将事件表中已经就绪的事件添加到这里,在使用epoll_wait调用时,仅观察这个list中有没有数据即可。
-
select和poll的最大开销来自内核判断是否有文件描述符就绪这一过程:每次执行select或poll调用时,它们会采用遍历的方式,遍历整个文件描述符集合去判断各个文件描述符是否有活动;epoll则不需要去以这种方式检查,当有活动产生时,会自动触发epoll回调函数通知epoll文件描述符,然后内核将这些就绪的文件描述符放到之前提到的ready list中等待epoll_wait调用后被处理。
-
select和poll都只能工作在相对低效的LT模式下,而epoll同时支持LT和ET模式。
-
综上,当监测的fd数量较小,且各个fd都很活跃的情况下,建议使用select和poll;当监听的fd数量较多,且单位时间仅部分fd活跃的情况下,使用epoll会明显提升性能。
线程池中的线程数量是依据什么确定的?
- 线程池中的线程数量最直接的限制因素是中央处理器(CPU)的处理器(processors/cores)的数量N:如果你的CPU是4-cores的,对于CPU密集型的任务(如视频剪辑等消耗CPU计算资源的任务)来说,那线程池中的线程数量最好也设置为4(或者+1防止其他因素造成的线程阻塞);对于IO密集型的任务,一般要多于CPU的核数,因为线程间竞争的不是CPU的计算资源而是IO,IO的处理一般较慢,多于cores数的线程将为CPU争取更多的任务,不至在线程处理IO的过程造成CPU空闲导致资源浪费,公式:最佳线程数 = CPU当前可使用的Cores数 * 当前CPU的利用率 * (1 + CPU等待时间 / CPU处理时间)(还有回答里面提到的Amdahl准则可以了解一下)。
【问题】不明白程序在进行io操作的时候,cpu在io操作中起到的作用是什么?
GET和POST的区别
- 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制。(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100(指示信息—表示请求已接收,继续处理)continue,浏览器再发送data,服务器响应200 ok(返回数据)。
定时器处理非活动链接:项目中,我们预先分配了MAX_FD个http连接对象,定时处理其中的非活动链接
相关文章
- KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化
- 阿里云发布第四代神龙架构 云计算首次进入5微秒时延时代
- 阿粉教你避开安装RabbitMQ的那些坑(命令实战)
- 计算机视觉技术即将迎来重大转变
- 阿里巴巴代码平台架构的演进之路
- 汽车网络安全为何重要
- 2021年最大的企业技术并购交易
- PyTorch 转入 Linux 基金会,对 AI 研究将产生重大影响
- 云计算如何成为可持续发展的推动者
- 令人惊悚的机器人Ameca会说话了,全凭GPT-3加持!
- 短信服务商如何选?博睿数据手机真机监测助企业识破短信“偷量”
- 人工智能 (AI) 正全面改变现代世界
- 为你的团队提供云计算服务的比较
- 道德和治理对人工智能的重要性
- 你的网络AI有你想象得那么智能吗?
- 面向云原生时代 阿里云推出自研“磐久”服务器系列
- 阿里开源玄铁RISC-V系列处理器,推动RISC-V架构走向成熟
- 人工智能创作的一件艺术品获奖引发争论
- IDC:2026年中国AI投资规模或将达266.9亿美元
- 行业专家指出苹果公司需要为企业推出iCloud商务套件