The C10K problem
原文链接:http://www.kegel.com/c10k.html
It's time for web servers to handle ten thousand clients simultaneously,don't you think? After all, the web is a big place now.
And computers are big, too. You can buy a 1000MHz machinewith 2 gigabytes of RAM and an 1000Mbit/sec Ethernet card for $1200 or so. Let's see - at 20000 clients, that's50KHz, 100Kbytes, and 50Kbits/sec per client. It shouldn't take any more horsepower than
that to take four kilobytes from the disk and send them to the network once a second for eachof twenty thousand clients.(That works out to $0.08 per client, by the way. Those$100/client licensing fees some operating systems charge are starting to look a little
heavy!) So hardware is no longer the bottleneck.
In 1999 one of the busiest ftp sites, cdrom.com, actually handled 10000 clients simultaneouslythrough a Gigabit Ethernet pipe.As of 2001, that same speed is nowbeing offered by several
ISPs,who expect it to become increasingly popular with large business customers.
And the thin client model of computing appears to be coming back instyle -- this time with the server out on the Internet, servingthousands of clients.
With that in mind, here are a few notes on how to configure operating systems and write code to support thousands of clients. The discussioncenters around Unix-like operating systems, as that's my personal areaof interest, but Windows is also covered a bit.
Contents
- The C10K problem
- Related Sites
- Book to Read First
- I/O frameworks
- I/O Strategies
- Serve many clients with each thread, and use nonblocking I/O andlevel-triggered readiness notification
- The traditional select()
- The traditional poll()
- /dev/poll (Solaris 2.7+)
- kqueue (FreeBSD, NetBSD)
- Serve many clients with each thread, and use nonblocking I/O and readinesschange notification
- epoll (Linux 2.6+)
- Polyakov's kevent (Linux 2.6+)
- Drepper's New Network Interface (proposal for Linux 2.6+)
- Realtime Signals (Linux 2.4+)
- Signal-per-fd
- kqueue (FreeBSD, NetBSD)
- Serve many clients with each thread, and use asynchronous I/O and completion notification
- Serve one client with each server thread
- LinuxThreads (Linux 2.0+)
- NGPT (Linux 2.4+)
- NPTL (Linux 2.6, Red Hat 9)
- FreeBSD threading support
- NetBSD threading support
- Solaris threading support
- Java threading support in JDK 1.3.x and earlier
- Note: 1:1 threading vs. M:N threading
- Build the server code into the kernel
- Serve many clients with each thread, and use nonblocking I/O andlevel-triggered readiness notification
- Comments
- Limits on open filehandles
- Limits on threads
- Java issues [Updated 27 May 2001]
- Other tips
- Other limits
- Kernel Issues
- Measuring Server Performance
- Examples
- Other interesting links
The C10K problem的更多相关文章
- (转)The C10K problem翻译
The C10K problem 如今的web服务器需要同时处理一万个以上的客户端了,难道不是吗?毕竟如今的网络是个big place了. 现在的计算机也很强大了,你只需要花大概$1200就可以买一个 ...
- 网络编程——The C10K Problem(C10K = connection 10 kilo 问题)。k 表示 kilo,即 1000
The C10K problem翻译 (C10K = connection 10 kilo 问题).k 表示 kilo,即 1000 比如:kilometer(千米), kilogram(千克). 如 ...
- C10K problem
什么是C10K问题 1W个客户端连接上一个server,客户不定时的发送请求. I/O策略 软件架构 1.单线程解决多重I/O调用 不要使用阻塞/同步的调用,如果非要这么做,那就采用多进程或者 ...
- 【原创】高性能网络编程(二):上一个10年,著名的C10K并发连接问题
1.前言 对于高性能即时通讯技术(或者说互联网编程)比较关注的开发者,对C10K问题(即单机1万个并发连接问题)应该都有所了解."C10K"概念最早由Dan Kegel发布于其个人 ...
- C10K问题渣翻译
The C10K problem [Help save the best Linux news source on the web -- subscribe to Linux Weekly News! ...
- C10K问题和Libevent库介绍
http://blog.chinaunix.net/uid-20761674-id-75056.html 一.C10K的问题 C10K的问题在上个世纪90年代就被提出来了.大概的意思是当用户数超过1万 ...
- c10k C10M
高性能网络编程(二):上一个10年,著名的C10K并发连接问题 阅读(22369) | 评论(9)收藏10 淘帖1 赞4 JackJiang Lv.9 1 年前 | |只看大图 1. ...
- C10K并发连接_转
转载:http://blog.csdn.net/wangtaomtk/article/details/51811011 1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小 ...
- C10K问题摘要
本文的内容是下面几篇文章阅读后的内容摘要: http://www.kegel.com/c10k.html (英文版) http://www.oschina.net/translate/c10k (中文 ...
随机推荐
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...
- Redis脚本插件之————执行Lua脚本示例
Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...
- mysql 检查字符串是否包含子串
1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...
- 算法_队列的Java通用数组实现
在实现Queue的API的时候,可以使用两个实例变量做索引,一个变量head指向队列的开头,另一个变量tail指向队列的结尾.在删除一个元素的时候,使用head访问,并将head+1,插入一个元素的时 ...
- fedora 14安装经验
初学linux系统,在win7 系统上安装VMware9.0,并用虚拟机安装fedora.安装了好几次,虽然还是没有彻底通透,但也有一点点心得,特地分享一下: 我安装fedora用于嵌入式ARM开发练 ...
- mongodb数据库js查询
#健康风险-disease db.disease.find({versions:'2'}).forEach(function(item){ item.diseaseDetail && ...
- map 后 PE 蓝屏原因专题讨论(e820cycles参数)
map 后 PE 蓝屏原因专题讨论(e820cycles参数)http://bbs.znpc.net/thread-6182-1-5.html不点发表于 2011-12-8 11:42:31 大家知道 ...
- CollectionFramework
- Xcode + Swift 制作动态原型
转载: Xcode + Swift 制作动态原型 为什么是 Xcode 和 Swift 我们尝试过的动态原型设计工具,Origami, Form, Hype, FramerJS,Pixate 等,但都 ...
- python 练习 4
#!/usr/bin/python # -*- coding: utf-8 -*- from math import sqrt import random def daoxu(n): d=n s=0 ...