一、I/O介绍和Nginx简介
1.1 I/O 类型(理解
)
同步和异步:关注的是消息通知
机制;
同步: 调用发出之后不会立即返回
,但一旦返回,则返回最终结果;异步:调用发出之后,被调用方
立即返回消息
,但返回的并非最终结果。被调用者通过状态、通知机制等来通知调用者,或通过回调函数来处理结果;
阻塞block和非阻塞nonblock:关注的是调用者等待被调用者返回调用结果时的状态。
阻塞:调用结果返回之前,调用者会被挂起
,调用者只有在得到返回结果之后才能继续。非阻塞:调用者在结果返回之前,不会被挂起;
1.2 I/O模型
blocking IO:阻塞式IO
nonblocking IO:非阻塞IO
multiplexing:多路复用IO
signal driven IO:事件驱动式IO
asynchronous IO:异步IO
真正执行IO
过程的阶段是内核内存数据拷贝到进程内存中。
1.3 Nginx优点
Nginx
(发音同engine x
)是一个异步框架的Web
服务器,也可以用作 反向代理, 负载平衡器 和 请求分发。
1.3.1 I/O多路复用(重点
)
多个描述符的IO操作都能够在
一个线程内并发交替的顺序完成
,这就叫做IO多路复用,这里的复用指的是复用同一个线程。(就像多个学生同时完成作业,同时共享一个老师,学生做完作业举手请求老师。)
select
:线性遍历,效率低,监视文件描述符的数量存在最大限制为1024。epoll
:每当FD
就绪,采用系统的回调函数之间将FD
放入,效率更高,最大连接无限制。(例:服务器告诉老板给顾客结账,'select'
只告诉老板有客人结账,老板需要挨个询问,而'epoll'
同时告诉老板是哪些顾客要结账。)Nginx
就是采用的epoll模型。
1.3.2 轻量级
1、功能模块少
2、代码模块化(易读易开发)
1.3.3 CPU的亲和(affinity)
nginx的CPU的亲和,有多个工作进程运行方式减少性能损耗,是一种把CPU核心和nginx工作进程绑定方式,把每个worker
进程固定在一个cpu
上执行,减少切换cpu
的cache mis