1. 什么是C10K问题

字面意思就是concurrency 10K,实际上就是说如何解决大并发问题。

2. 常见解决方案

2.1 异步非阻塞

2.1.1 I/O模型

出现C10K问题,各个操作系统都从OS层面提供了异步非阻塞的IO模型
FressBS有kqueue,Windows有IOCP,linux有epoll。

2.1.2 新IO模型的产物

在这种异步非阻塞IO模型下,也诞生了很多优秀产品:

  1. nginx:高性能的HTTP和反向代理服务器
  2. libevent:高性能网络库
  3. node.js:基于 Chrome V8 引擎的 JavaScript 运行环境

等等。。。

他们的特点都是高性能,之所以高性能也是来源于异步非阻塞的

2.2 协程

协程本质上仍然属于异步非阻塞的技术范畴。出现的原因是异步嵌套回调太难写,异步的编程思维本来就不太符合人脑的习惯。

协程技术让程序员用写同步程序的思维来写异步的代码。

协程的实现可以理解为:一个线程可以理解成由多个协程组成。协程只属于用户态的范畴。其实现则是通过在用户态切换协程,协程有各自的堆栈信息来保存自己的状态。线程进程的切换都会涉及核心态,有更大的代价。通过协程之间异步的消息通信,可以实现协程,达到异步编程的目的。

由此可见,协程比OS进程性能好源于其用户态的调度。