中国廉政建设网是正规网站吗,wordpress设置插件,海洋网站建设公司,找app开发公司阻塞/非阻塞、同步/异步
数据就绪 - 根据系统IO操作的就绪状态
阻塞 - 调用IO方法的线程进入阻塞状态#xff08;挂起#xff09;
非阻塞 - 不会改变线程的状态#xff0c;通过返回值判断 数据读写 - 根据应用程序和内核的交互方式
同步 - 数据的读写需要应用层去读写
…阻塞/非阻塞、同步/异步
数据就绪 - 根据系统IO操作的就绪状态
阻塞 - 调用IO方法的线程进入阻塞状态挂起
非阻塞 - 不会改变线程的状态通过返回值判断 数据读写 - 根据应用程序和内核的交互方式
同步 - 数据的读写需要应用层去读写
异步 - 操作系统提供相应服务 阻塞/非阻塞都是同步IO只用使用了特殊API才是异步IO 五种IO模型
阻塞
调用者调用了某个函数等待这个函数返回期间什么也不做不停的去检查这个函数有没有返回必须等这个函数返回才能进行下一步动作。 非阻塞
非阻塞等待每隔一段时间就去检测10事件是否就绪代码轮询。没有就绪就可以做其他事。非阻塞IO执行系统调用总是立即返回不管事件是否已经发生若事件没有发生则返回-1此时可以根据errno区分这两种情况对于acceptrecv和send事件未发生时errno通常被设置成EAGAIN。 IO复用
Linux用 select/pol/epol函数实现IO复用模型这些函数也会使进程阻塞但是和阻塞IO所不同的是这些函数以同时阻塞多个IO操作。而且可以同时对多个读操作、写操作的IO函数进行检测。直到有数据可读或可写时才真正调用IO操作函数。 信号驱动
Linux 用套接口进行信号驱动IO安装一个信号处理函数进程继续运行并不阻塞当IO事件就绪进程收到SIGIO信号然后处理IO事件 第一阶段是异步第二阶段是同步通过消息通知机制提高了效率
异步IO
Linux中可以调用 aio_read 函数告诉内核描述字缓冲区指针和缓冲区的大小、文件偏移及通知的方式然后立即返回当内核将数据拷贝到缓冲区后再通知应用程序。 Web服务器简介及HTTP协议
一个Web Server就是一个服务器软件或者运行这个服务器软件的硬件。主要功能是通过HTTP协议与客户端浏览器进行通信接收、存储、处理来自客户端的HTTP请求 通常用户使用 Web 浏览器与相应服务器进行通信。在浏览器中键入域名”或P地址:端口号”浏览器则先将你的域名解析成相应的 P 地址或者直接根据你的IP地址向对应的 Web 服务器发送一个 HTTP 请求。这一过程首先要通过TCP 协议的三次握手建立与目标 Web 服务器的连接然后 HTTP 协议生成针对目标 Web 服务的 HTTP 请求报文通过 TCP、IP 等协议发送到目标 Web 服务器上。 HTTP协议应用层的协议
超文本传输协议 (Hypertext Transfer ProtocolHTTP) 是一个简单的请求-响应协议它通常运行在TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCI I形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP是万维网的数据通信的基础。默认端口80
请求响应步骤
1. 客户端连接Web服务器
2. 发送HTTP请求
3. 服务器接受请求并返回HTTP响应
4. 释放TCP连接
5. 客户端浏览器解析HTML内容
HTTP请求格式 请求方法GET\HEAD\POST\PUT\DELETE\TRACE\OPTIONS\CONNECT
HTTP响应格式 服务器编程基本框架和两种高效的事件处理模式
服务器编程基本框架 IO处理单元 - 处理客户连接、读写网络数据
逻辑单元 - 业务进程或线程
网络存储单元 - 数据库、五年间或缓存
请求队列 - 各单元之间的通信方式 两种高效的事件处理模式
服务器程序通常需要处理三类事件IO事件、信号、定时事件
两种高效的处理模式
同步IO模式 - Reactor模式
异步IO模式 - Practor模式 Reactor模式 Proactor模式 模拟Proactor模式项目采用的方法 线程同步机制类封装及线程池实现
线程池 - 防止无休止的创建/销毁线程 线程池中的线程数最直接的限制因素是CPU的处理器数量CPU密集型任务最好等于核IO密集型任务一般多余CPU核心数不至于在线程处理IO过程中造成CPU空闲导致浪费
为什么使用线程池
1. 空间换时间通过硬件资源换取运行效率
2. 这组资源在服务器启动之初就完全创建初始化 - 静态资源
3. 可以直接从池中拿无需资源动态分配
4. 处理完一个客户连接后将相关资源放池中无需系统调用释放资源