I/O模型 处理高并发的时候用\
I/O模型简介
同步/异步(消息反馈机制):
关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知。
同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用者主动询问事情是否处理完成 异步:asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的运行状态
阻塞/非阻塞:
关注调用者在等待结果返回之前所处的状态
阻塞:blocking,指IO操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。 非阻塞:nonblocking,指IO操作被调用后立即返回给用户一个状态值,而无需等到IO操作彻底完成,在最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。
多路复用I/O型
多路复用I/O(I/O multiplexing)模型是一种基于事件驱动的 I/O 处理模式。它利用操作系统提供的多路复用机制(如select、poll、epoll等)来同时监听多个 I/O 事件,当某个事件就绪时,通知应用程序进行处理。
通过多路复用I/O模型,可以在一个线程中同时处理多个客户端连接的 I/O 操作,而不需要为每个连接创建一个线程或进程,避免了资源开销和上下文切换的成本。
常见的多路复用I/O模型有:
select:适用于连接数不太多的情况,轮询监听多个文件描述符上的 I/O 事件。 poll:与select类似,但没有连接数的限制,并且不会修改传入的描述符集合。 epoll:适用于连接数非常多的情况,通过事件驱动机制来处理 I/O 事件,可以在大并发情况下具有较高的性能优势。
异步I/O模型
异步 I/O 模型是一种非阻塞的 I/O 处理模式,通过回调函数或事件通知的方式来处理已完成的 I/O 操作,能够提高系统的并发性和处理效率。
事件模型 select poll epoll
-
Nginx服务使用异步非阻塞模式:请求不需要排队,会反馈任务的完成结果。
-
Apache服务使用同步阻塞模式:请求需要排队,且不会主动返回结果。
优缺点
区别
NGINX概述
简介
-
作用:支持七层(应用层)和四层(传输层)反向代理、可做web服务器。
-
特性:高可靠性、支持热部署、可扩展性好、高并发高性能、单机部署。
-
进程:一个主进程master生成多个worker子进程,worker子进程负责处理工作。
NGINX和APACHE的区别?
核心区别:
- apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个 连接(万级别)可以对应一个进程;
- 需要稳定用apache,需要高性能用nginx
什么是零拷贝?
在Nginx中,使用零拷贝技术可以将数据从文件系统直接发送到网络套接字中,而不需要中间的内存拷贝。
这可以减少CPU的使用量,减少内存带宽的消耗,并且可以更快地将数据发送到客户端
Nginx模块
安装方式
方式一:yum安装
#安装依赖包
yum install -y epel-releas
#yum方式安装
yum install -y nginx
方式二:编译安装 (推荐使用)
前置准备
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#安装依赖包
useradd -M -s /sbin/nologin nginx
#新建nginx用户便于管理
cd /opt/
wget http://nginx.org/download/nginx-1.18.0.tar.gz
#官网下载安装包
编译安装nginx
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
#解压软件包
mkdir /apps/nginx -p
./configure --help
#查看帮助模块
./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
make
make install
chown -R nginx.nginx /apps/nginx
#修改权限
ll /apps/nginx/
total 0
drwxr-xr-x 2 root root 333 Sep 22 12:49 conf
drwxr-xr-x 2 root root 40 Sep 22 12:49 html
drwxr-xr-x 2 root root 6 Sep 22 12:49 logs
drwxr-xr-x 2 root root 19 Sep 22 12:49 sbin
nginx开机自启(可选)
vim /usr/lib/systemd/system/nginx.service
#建立文件
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
#重新加载配置
systemctl enable --now nginx
#开机自启并立即启动 如果卡主是应为logs下有 nginx.pid 文件 删除即可
chown -R nginx.nginx /apps/nginx
#修改权限
Nginx命令 常用选项
常用选项
#基本格式
nginx [选项] [参数]
信号
#基本格式
nginx -s 信号