C10K问题摘要
本文的内容是下面几篇文章阅读后的内容摘要:
http://www.kegel.com/c10k.html (英文版)
http://www.oschina.net/translate/c10k (中文翻译版)     
http://www.cnblogs.com/fll/archive/2008/05/17/1201540.html
The C10K problem   
http://blog.csdn.net/xiao_qiang_/article/details/8960229
千万级并发实现的秘密:内核不是解决方案,而是问题所在!    
http://www.csdn.net/article/2013-05-16/2815317-The-Secret-to-10M-Concurrent-Connections 
从 C10K 到 C500K    
http://dbanotes.net/arch/c10k_c500k.html
几种解决思路的优缺点
一个线程或者进程服务于一个客户端(Serve one client with each thread/process, and use blocking I/O )
这种策略很能难足高性能程序的需求,好处是实现极其简单,容易嵌入复杂的交互逻辑。Apache、ftpd等都是这种工作模式。
这样不好的地方在于需要为每个客户端使用一个完整的栈,从而比较浪费内存。 许多操作系统仍在处理数百个线程时存在一定的问题。如果每个线程使用2MB的栈,那么当你在32位的机器上运行 512(2^30 / 2^21=512)个线程时,你就会用光所有的1GB的用户可访问虚拟内存(Linux也是一样运行在x86上的)。 你可以减小每个线程所拥有的栈内存大小,但是由于大部分线程库在一旦线程创建后就不能增大线程栈大小,所以这样做 就意味着你必须使你的程序最小程度地使用内存。当然你也可以把你的程序运行在64位的处理器上去。
每个线程服务多个客户端,使用非阻塞I/O和水平触发的就绪通知(Serve many clients with each thread, and use nonblocking I/O and level-triggered readiness notification)
网络句柄设置为非阻塞模型,然后使用select()或poll()来告知哪个句柄已有数据在等待 处理。    
注意:牢记内核的就绪通知仅仅只是个提示,当你试图从一个文件描述符读取数据时,该文件描述符可能并没有准备好。这就是为什么需要在使用就绪通知的时候使用非阻塞模型的原因。
一个线程服务多个客户端,使用非阻塞I/O和就绪改变时通知(Serve many clients with each thread, and use nonblocking I/O and readiness change notification)
Readiness change notification(或边缘触发就绪通知)的意思就是当你给内核一个文件描述 符,一段时间后,如果该文件描述符从没有就绪到已经准备就绪,那么内核就会发出通知,告知 该文件描述符已经就绪,并且不会再对该描述符发出类似的就绪通知直到你在描述符上进行一些 操作使得该描述符不再就绪(如直到在send,recv或者accept等调用上遇到EWOULDBLOCK错误,或 者发送/接收了少于需要的字节数)。    
当使用Readiness change notification时,必须准备好处理乱真事件,因为最常见的实现是只 要接收到任何数据包都发出就绪信号,而不管文件描述符是否准备就绪。
一个服务线程服务多个客户端,使用异步I/O(Serve many clients with each thread, and use asynchronous I/O and completion notification)
在标准Unix下,异步I/O是由"aio_"接口 提供的,它把一个信号和值与每一个I/O操作关联起来。信号和其值的队列被有效地分配到用户的 进程上。异步I/O是POSIX 1003.1b实时标准的扩展,也属于Single Unix Specification,version 2.
AIO使用的是边缘触发的完成时通知,例如,当一个操作完成时信号就被加入队列
C10K问题摘要的更多相关文章
- [转]何为C10K问题
		
我在学习网络编程的时候经常看到C10K问题,那么究竟什么是C10K问题呢?我看到了一篇好文章就转了过来,原文地址为:c10k问题 所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是c ...
 - java根据html生成摘要
		
转自:http://java.freesion.com/article/48772295755/ 开发一个系统,需要用到这个,根据html生成你指定多少位的摘要 package com.chendao ...
 - Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
		
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
 - 2、摘要函数——MD2/MD4/MD5数字签名
		
摘要是用来防止数据被私自改动的方法,其中用到的函数叫做摘要函数.这些函数的输入可以是任意大小的信息,但是输出是大小固定的摘要.摘要有个重要的特性:如果改变了输入信息的任何内容,即使改变一位,输出也将发 ...
 - 前端学HTTP之摘要认证
		
前面的话 上一篇介绍的基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与SSL配合使用 摘要认证与基本认证兼容,但 ...
 - Java 消息摘要 散列 MD5 SHA
		
package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...
 - rpm查询命令摘要
		
任务 命令 显示软件包的相关信息 rpm -q -i NAME 列出软件包中含有的所有文件 rpm -q -i NAME 列出软件包中含有的配置文件 rpm -q -c NAME 列出软件包中含有的文 ...
 - [Java 安全]消息摘要与数字签名
		
消息摘要 算法简述 定义 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知 ...
 - HMAC加密的消息摘要码
		
HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可 ...
 
随机推荐
- INSERT IGNORE 与INSERT INTO的区别,以及replace的用法
			
INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据. 这样就可以保 ...
 - XMPP Authentication
			
From: http://www.ietf.org/rfc/rfc2831.txt 2 Authentication The following sections describe how to ...
 - GPUImage处理图片(滤镜)
			
GPUImage 是基于 GPU 处理图像的一个开源库, 提供了各种图像处理滤镜,例如调 亮度/饱和度/曝光度/白平衡/锐化等滤镜. 并且支持照相机/摄像机 的实时滤镜. GPUImage采用链式方式 ...
 - python全栈开发_day10_函数的实参和形参
			
一:函数的实参和形参 实参是在调用函数时()出现的外界的实际的值 形参不能再函数外部直接使用 1)实参的两种形式 实参是调用函数时()中传入的参数 1.位置实参 def a(a): print(a) ...
 - CF1012B Chemical table 题解【二分图】【构造】
			
有意思的网格图转化.CF Div.1 还是挺有难度的. 注:由于本题有较完美的中文题面,所以不贴英文题面. 英文题面 题目描述 Innopolis 大学的教授正努力研究元素周期表.他们知道,有 \(n ...
 - ribbon 收起 最小化 导航条 选项卡 navBarControl 隐藏
			
//设置隐藏导航条 this.ribbonControl.Minimized = true; 正解 //设置navBarControl隐藏 navBarControl.OptionsNavPane.N ...
 - Qt4.8.5移植
			
这两天搞了Qt移植 因为不小心 耽误了挺多时间 但是也比较好的掌握了 现在记录一下 准备工具: tslib-1.16 qt-everywhere-opensource-src-4.8.5.tar ...
 - git遇到的常见错误整理
			
远程仓库与本地代码不一致 解决: git pull --rebase git@gitee.com:l544402029/MUTAO.git 将仓库里的代码pull下来 ,然后重新进行git add ...
 - android面试注意点
			
Java 基础知识 面向对象的基本思想 Object类相关:Object类的几个关键函数.String涉及到的常量池概念,序列化 & 反序列化. 重要关键字:final.static. 内部类 ...
 - Zookeeper选举算法原理
			
Zookeeper选举算法原理 Leader选举 Leader选举是保证分布式数据一致性的关键所在.当Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入Leader选举. (1) 服 ...