C10问题
C10K问题是指服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是C0K这个名字的由来)。由于硬件成本幅度降低和硬件版本的提高,如果服务器能够解决多客户端的问题,那么也就意味着将降低每一个客户端的成本。
解决IO的策略:
1>用一个线程来同时为多个客户端服务,非阻塞IO以及水平触发的方式的就绪通知。
所谓水平触发,是只要有数据就会触发,这种方式只需要将句柄设置成非阻塞的NO-BLOCK方式,通过selct/poll/epoll告诉应用层那个套接字需要进行处理,通过这种机制,内核告诉应用层那些文件句柄准备好了或者那些数据需要处理,如果是读操作表示缓冲区的数据一经准备好,不会发生阻塞状态,并且如果一次数据没有读取完成,内核就会不断的通知你来让应用层读取数据,如果是写操作,准备好了意味缓冲区一经准备好了,此时写操作也不会发生任何阻塞。
2>用一个线程来同时准备为多个客户端服务,非阻塞IO以及边缘触发的方式的就绪通知。
边缘触发不同于水平触发,只有在文件描述符发生变化的时候内核才会通知你。当内核通知某个读描述符准备就绪后,当该缓冲区的所有数据被读出来状态才会改变,否则状态不发生改变。并且需注意,当客户端一次读取没有将客户端的数据读取完全,还有一部分数据在缓冲区里,这时内核不会通知应用层程序去读取,只有当下一次读取时,才会将数据读取出来。并且边缘触发有一个常见的bug,在某种情况下,内核一旦收到新的数据包的就绪通知,不管你上一次就绪的数据是否被应用层处理,所以如果某一次就绪通知的数据没有被正常的完整的处理,就开始下一个通知,那么下一次的就绪通知就会覆盖掉前面的数据,并且数据不可恢复。
C10问题的更多相关文章
- 编译uboot提示libasm-offsets.c10 error bad value (armv5)解决方法
编译uboot-2016.09提示如下错误: lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch 解决方法: 1.在命 ...
- S2750&S5700&S6700 V200R003(C00&C02&C10) MIB参考
https://support.huawei.com/enterprise/docinforeader.action?contentId=DOC1000027337&idPath=791971 ...
- C10 C语言数据结构
目录 枚举 结构体 共用体 枚举 enum enum枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读. 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 枚举 ...
- [C10] 异常检测(Anomaly Detection)
异常检测(Anomaly Detection) 问题的动机 (Problem Motivation) 异常检测(Anomaly detection)问题是机器学习算法中的一个常见应用.这种算法的有趣之 ...
- 我为NET狂~群福利:逆天书库
我为NET狂-官方群① 238575862 爱学习,爱研究,福利不断,技能直彪~~ 最近更新:2016-08-30,欢迎补充 暂缺PDF: │ SQL Server 2012 Analysis Ser ...
- 《转载》PAT 习题
博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...
- .NET 开源SqlServer ORM框架 SqlSugar 3.0 API
3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...
- UML类图关系全面剖析
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- 原创 C++作用域 (一)
1概述 在所有的计算机程序中,一个基本的目标是操作一些数据,然后获得一些结果.为了操作这些数据,需要为这些数据分配一段内存,我们可以将这段内存称为变量.为了方便操作,以及程序可读性方面的考虑,需要使用 ...
随机推荐
- SP7586 NUMOFPAL - Number of Palindromes 解题报告
SP7586 NUMOFPAL - Number of Palindromes 题意翻译 求一个串中包含几个回文串 输入输出格式 输入格式: The string S. 输出格式: The value ...
- HDU.2647 Reward(拓扑排序 TopSort)
HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...
- JavaScript正则表达式的浏览器的差异
JavaScript中的正则表达式在不同的浏览器中得到的结果可能会有差异,下面把正则表达式在五大主流浏览器(IE.Firefox.Chrome.Safari.Opera,以当前版本为准)之间的差异整理 ...
- LoadRunner中的IP欺骗
应用程序服务器和网络设备使用IP地址来识别客户端.应用程序服务器通常会对来自同一计算机的客户端信息进行高速缓存. 网络路由器尝试对原信息和目标信息进行高速缓存以优化吞吐量.如果多个用户具有相同的IP地 ...
- some interesting words
No one gets rich betting against the market. Never bet against the Fed. Bulls make money, bears make ...
- 使用tcpdump监控网络消息发送
tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpd ...
- oracle xml操作
/*=====================生成\修改xml========================= */ --xmlelement多个标签层级 SELECT XMLELEMENT(& ...
- UVA 10214 Trees in a Wood
https://vjudge.net/problem/UVA-10214 题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树 ans=Σ gcd(x,y)=1 欧拉函数搞搞 #incl ...
- spring怎么实现单例模式?
Spring学习之路——单例模式和多例模式 在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例) singleton(单例):只有一个共享的实例存 ...
- Jenkins Pulgin 安装
1. 利用管理插件找到需要安装的插件. 2. 如果安装失败,查看缺少啥. 3. 手动去下载http://updates.jenkins-ci.org/download/plugins/ 4. 安装此插 ...