软件技术搜狗实验室技术交流文档:epoll简介

米花 发表 于:10年前 浏览量:236

由来

网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为 C10K 问题。随着互联网的迅速发展,越来越多的网络服务开始面临 C10K 问题,作为大型网站的开发人员有必要对 C10K 问题有一定的了解。本文的主要参考文献是http://www.kegel.com/c10k.htmls。

C10K 问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往是非线性的。举个例子:如果没有考虑过 C10K 问题,一个经典的基于 select的程序能在旧服务器上很好处理 1000 并发的吞吐量,它在 2 倍性能新服务器上往往处理不了并发 2000 的吞吐量。

这是因为在策略不当时,大量操作的消耗和当前连接数 n 成线性相关。会导致单个任务的资源消耗和当前连接数的关系会是 O(n)。而服务程序需要同时对数以万计的socket 进行I/O处理,积累下来的资源消耗会相当可观,这显然会导致系统吞吐量不能和机器性能匹配。为解决这个问题,必须改变对连接提供服务的策略。

基本策略

主要有两方面的策略:1.应用软件以何种方式和操作系统合作,获取 I/O事件并调度多个 socket 上的 I/O 操作;2. 应用软件以何种方式处理任务和线程/进程的关系。前者主要有阻塞 I/O、非阻塞 I/O、异步 I/O这 3 种方案,后者主要有每任务 1 进程、每任务 1 线程、单线程、多任务共享线程池以及一些更复杂的变种方案。

更多内容详见如下文档 ……

文档下载地址:http://www.sogou.com/labs/report/1-1.pdf (备用地址:sogouLabs_epoll1-1.pdf)

来自:http://labs.blog.sohu.com/90891010.html

本文由 米花发表。转载请注明出处:https://www.mihua.net/list/0/1837.html

发表评论

您的昵称:

猜你喜欢

最近更新