C10K问题是指服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是C0K这个名字的由来)。由于硬件成本幅度降低和硬件版本的提高,如果服务器能够解决多客户端的问题,那么也就意味着将降低每一个客户端的成本。

解决IO的策略:

1>用一个线程来同时为多个客户端服务,非阻塞IO以及水平触发的方式的就绪通知。

  所谓水平触发,是只要有数据就会触发,这种方式只需要将句柄设置成非阻塞的NO-BLOCK方式,通过selct/poll/epoll告诉应用层那个套接字需要进行处理,通过这种机制,内核告诉应用层那些文件句柄准备好了或者那些数据需要处理,如果是读操作表示缓冲区的数据一经准备好,不会发生阻塞状态,并且如果一次数据没有读取完成,内核就会不断的通知你来让应用层读取数据,如果是写操作,准备好了意味缓冲区一经准备好了,此时写操作也不会发生任何阻塞。

2>用一个线程来同时准备为多个客户端服务,非阻塞IO以及边缘触发的方式的就绪通知。

  边缘触发不同于水平触发,只有在文件描述符发生变化的时候内核才会通知你。当内核通知某个读描述符准备就绪后,当该缓冲区的所有数据被读出来状态才会改变,否则状态不发生改变。并且需注意,当客户端一次读取没有将客户端的数据读取完全,还有一部分数据在缓冲区里,这时内核不会通知应用层程序去读取,只有当下一次读取时,才会将数据读取出来。并且边缘触发有一个常见的bug,在某种情况下,内核一旦收到新的数据包的就绪通知,不管你上一次就绪的数据是否被应用层处理,所以如果某一次就绪通知的数据没有被正常的完整的处理,就开始下一个通知,那么下一次的就绪通知就会覆盖掉前面的数据,并且数据不可恢复。

C10问题的更多相关文章

  1. 编译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.在命 ...

  2. S2750&S5700&S6700 V200R003(C00&C02&C10) MIB参考

    https://support.huawei.com/enterprise/docinforeader.action?contentId=DOC1000027337&idPath=791971 ...

  3. C10 C语言数据结构

    目录 枚举 结构体 共用体 枚举 enum enum枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读. 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 枚举 ...

  4. [C10] 异常检测(Anomaly Detection)

    异常检测(Anomaly Detection) 问题的动机 (Problem Motivation) 异常检测(Anomaly detection)问题是机器学习算法中的一个常见应用.这种算法的有趣之 ...

  5. 我为NET狂~群福利:逆天书库

    我为NET狂-官方群① 238575862 爱学习,爱研究,福利不断,技能直彪~~ 最近更新:2016-08-30,欢迎补充 暂缺PDF: │ SQL Server 2012 Analysis Ser ...

  6. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  7. .NET 开源SqlServer ORM框架 SqlSugar 3.0 API

    3.1.x ,将作为3.X系统的最后一个版本,下面将会开发 全新的功能 更新列表:https://github.com/sunkaixuan/SqlSugar/releases 优点: SqlSuga ...

  8. UML类图关系全面剖析

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  9. 原创 C++作用域 (一)

    1概述 在所有的计算机程序中,一个基本的目标是操作一些数据,然后获得一些结果.为了操作这些数据,需要为这些数据分配一段内存,我们可以将这段内存称为变量.为了方便操作,以及程序可读性方面的考虑,需要使用 ...

随机推荐

  1. BZOJ2938 & 洛谷2444:[POI2000]病毒——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2938 https://www.luogu.org/problemnew/show/P2444 二进制 ...

  2. PE格式示意图

  3. React属性用法总结

    1. 键值对 <ClaaNameA name = “Tom” /> <ClaaNameA name = {Tom} /> <ClaaNameA name = {“Tom” ...

  4. Codeforces VK Cup Finals #424 Div.1 A. Office Keys(DP)

    显然是不可能交叉取钥匙的,于是把钥匙和人都按坐标排序就可以DP了 钥匙可以不被取,于是f[i][j]表示前i个钥匙被j个人拿的时间 f[i][j]=min(f[i-1][j],max(f[i-1][j ...

  5. 基于jquery的扩展写法

    (function($){ $.fn.aa = function(canshu){ html = $(this).text(); alert(html) }})(jQuery); (function( ...

  6. SQL Server 2008设置主键为自增

    环境:SQL Server 2008 问题:设置主键,将主键设为自增. 解决:点击table->选中表->design->选中需要设置主键的字段,单击右键"设置主键&quo ...

  7. PhoneGap API介绍:Camera

    本文将介绍PhoneGap API——Camera:使用设备的摄像头采集照片,对象提供对设备默认摄像头应用程序的访问. 方法: camera.getPicture 参数: cameraSuccess ...

  8. HDU4685:Prince and Princess(二分图匹配+tarjan)

    Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  9. POJ3026:Borg Maze (最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18644   Accepted: 5990 题目链接:h ...

  10. 跨平台sdk接入总结

    sdk说明: 1.Bugly SDK:自动捕获上报App的脚本错误和原生代码引发的崩溃信息,并提供异常问题分类分析. 2.语音 SDK:提供游戏内收发语音功能. 接入步骤: step1:仔细通读一遍s ...