网络IO模型

背景知识

在深入的去了解和学习 IO 模型时,是要求对操作系统的一些底层概念是要了解的,比如 VFS树、FD、Page Cache、Dirty Page、Flush 等。这些概念到时候我会再学习一下,然后单独去写一篇操作系统关键性概念的文章。另外,在学习 IO 的时候,TCP/IP 协议也是需要了解的,包括三次握手以及 linux 中在建立连接时的系统调用信息,这对于理解 IO 很有帮助。

C10K 问题

  • C10K 问题介绍

    线程是 CPU 调度的最小单位,进程是 CPU 分配资源的最小单位

    C10K 是一个经典的服务端问题。最初的服务器是基于进程/线程模型,新的一个 TCP 连接,就需要分配一个进程(或者线程),如果有 10k 个连接,那么需要创建 1w 个进程(或线程),对于单机服务器来说,这是无法承受的。所以如何去突破单机的性能,是高性能网络编程必须要面对的问题。关于 C10K 问题的探讨,可以参考这篇文章 The C10K problem.

  • 解决方案
    从 C10K 的背景中看出,要向解决高并发的连接问题,无非有两种,一是一个连接一个线程,另一个是多个连接一个线程。前者会因为系统资源而限制,就算系统资源充足,实际上效率也并不高,会涉及到大量的线程上下文切换操作,扩展性差,后者是现在的主流处理方式。

阅读更多