首页 > 其他 > 详细

IO模型

时间:2017-03-03 14:13:17      阅读:207      评论:0      收藏:0      [点我收藏+]

一、套接字(socket)

    要实习两个主机之间的互相通信,至少需要一对套接字,一个运行于客户端,一个运行于服务端。套接字主要有三个参数:通信的目的IP地址、使用的传输层协议(TCP或UDP)和使用的端口号。我们是基于ip地址实现主机的通信,那么两个主机连通之后会有很多应用,我如何让我的qq应用找到你的qq应用进行通信,这个时候就需要用到套接字。

    套接字的含义:原地址的IP加端口号+目标地址的IP加端口号,其用于标识客户端请求的服务器和服务。

    连接过程:服务端监听,客户端请求,连接确认。


    IP地址可以实现两个主机的通信,套接字(一对IP加端口)可以实现两个应用的通信。


    如果是web服务器的话,用户请求先到达内核空间,内核空间通过web服务所监听的套接字,可以将用户请求转发给用户空间的某个服务进程进程通过系统调用向内核发起请求,内核再去磁盘加载资源,然后拷贝到用户空间。

二、IO模型

    上面叙述过程分为两个阶段,内核去磁盘加载资源至内核内存中,然后cp到用户空间。这两个过程进程一直在等待资源,所以这个过程叫阻塞式IO模型。

    非阻塞IO模型就是内核加载过程中,跟数据复制到用户空间过程中,进程去干别的事了,但是为了接到内核cp的数据,所以隔一段时间过来看一次(这个过程叫轮训),这种情况叫做非阻塞IO模型。

    IO复用,内核接到指令后,就开始加载数据,然后从内核内存cp到用户空间。这个过程中,进程都是处于阻塞状态,但是与阻塞模型相比,IO复用可以同时阻塞N个IO操作,也就是一个线程可以响应多个请求。


三、Nginx中的epoll,select就是使用IO复用。

    select是遍历活跃的套接字,epoll是事先登记,根据需要查询套接字。一个是按个宿舍去查找,一个是直接根据注册查找,当然epoll更快了。这也是为什么Nginx的反向代理功能很强大,就是利用IO复用的功能,以及epoll模型。一个线程可以响应多个请求,httpd是select模型。



本文出自 “11591830” 博客,谢绝转载!

IO模型

原文:http://11601830.blog.51cto.com/11591830/1902800

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!