进程与线程,同步和异步,阻塞和非阻塞,nginx事件驱动模型,

进程:
进程是程序在计算机上的关于数据集合的一次运行活动,是系统资源分配和调度的最小单元,进程也是一个程序。
线程:
线程是cpu调度的基本单位,可以说进程运行在线程之上。
一个线程只能有一个进程,一个进程可以有多个线程。
一个进程内的资源改进程内的线程共享。

同步:
发送方发送了请求之后,等待接收方发回信息后,再继续发下一个请求。
可以想象一下打电话。
异步:
发送方发送了请求后,不等待接送放发回信息,可以继续发送下一个请求。
类型与发短信。

阻塞:
就是在进程(线程)获取最终结果前被系统挂起了,只能等获得结果后,该进程才会继续处理其他请求。

非阻塞:
就是在进程(线程)获取最终结果前,它可以不用等待,可以去处理其他请求,当有了最终结果后再回来处理。

nginx事件驱动模型
当客户端发送一个请求到服务器后,服务器的某个进程(nginx process)会去处理该请求,在还没有得到结果返回客户端时,它又会去处理其他请求(节约资源,高并发)。然后服务端会把这些请求作为事件(比如说读,写,查询)交给“事件收集器”,“事件收集器”再把事件交给“事件处理器”进程处理,最后当“事件处理器”处理完后把数据返回给进程,有进程交给客户端。
事件收集器和事件处理器都属于内核,需要操作系统内核进行支撑。
nginx驱动模型有select、poll、epoll、rtsig、kqueue、dev/poll(unix平台上使用)、eventport
最常用的属于前三种:
select:
windows和linux平台都支持:
创建一个事件描述符集合,它包含三类:read、write、exception(异常)。
调用底层select()函数,等待事件发生。
需要轮询描述符的每一个事件,检查是否有事件发生,如果有就执行。
poll:
适用于linux,不支持windows
工作类型于select基本类似,只不过poll建立三个事件描述符集合。
epoll:
在linux内核2.5.44以上支持,是linux最适用的模型。它比poll更高效,它不会轮询整个事件描述符,而是linux内核会关注事件描述符,当有变动时,内核会发来通知。

你可能感兴趣的:(运维linux,运维)