1.模型一:C/S(经典的) 原由:TCP/IP协议是没有客户和服务端的区别。可是资源(视频,新闻,软件)都是被数据提供者所垄断 逻辑:服务器启动后,首先建立一个或多个监听socket,而且调用bind函数将其绑定到须要(自定义)的端口,而后调用listen函数等待客户链接 特色:客户链接是随机事件,须要某种I/O模型来监听链接。 例子:服务器I/O复用技术之一的select系统调用 (当监听接收到链接 ,服务器用accept来接收,而且分配一个逻辑单元为它服务,(fork系统产生逻辑单元,逻辑单元处理好一切返回给客户端,逻辑单元能够是新建立的子进程,子线程或其余)))
2.接下来就是宅男熟悉的P2P模型linux
优点:就是去掉通讯的中心
特色;就是每台机器在消耗服务的时候也会给别人提供服务
例子:迅雷,云计算机群
问题:主机相互之间很难发现(发现服务器来解决这个问题)
可是本质仍是CS,只是一个变相的扩展数据库
I/O处理单元--------》逻辑单元---------》网络存储单元 中间都是由请求队列(通讯方式,通常是永久的tCP链接)
2.1I/O处理单元:管理客户链接的模块,等待而且接受新的链接,接受客户的数据,将服务器的相应的数据返回客户端。数据的收发不必定在这里,也可能在逻辑单元,(取决于事件处理模式) 2.2逻辑单元:分析而且处理数据,而后将结果传递给I/O处理单元或者直接发送给客户端(对于机器群来讲,一个逻辑单元也许就是一台逻辑服务器) 2.3.网络储存:能够是数据库,缓存和文件,或者一台服务器(有些是不须要的,如ssh,telnet) 2.4.请求队列:各个单元之间通信方式的抽象 两个方面:I/O处理单元通知逻辑单元的方式,逻辑单元访问存储单元的机制 这里就会涉及到池的概念,这个TCP理解通常是事先创建好的永久高效的TCP链接
3.I/O模型
3.1阻塞和非阻塞能够用于全部的文件描述符,不只仅是socket,
3.2阻塞是多是没法当即完成而被操做系统挂起,知道等待完成事件发生。
3.3非阻塞是系统的调用老是当即返回。,因此若是完成世家没有发生,就会返回和错误同样的标记。(errno能够区分)
要求:咱们须要在完成世家发生的状况下,操做非阻塞,才能实现高效率。
例子:I/O复用(最经常使用的通知机制,还有SIGIO信号)
含义:有个函数叫I/O复用函数,他能够向内核注册一组事件,内核能够将已经完成的事件通知给应用程序。
例子:I/O复用函数:select,poll,epoll_wait
原理:自己每一个函数都是阻塞的,可是他们都具备监听多个I/O事件 的能力
备注:SIGIO的信号处理之后再说
备注2:上述的阻塞I/O,I/O复用和信号驱动I/O都是同步I/O模型。
原理:I/O读写操做都是在I/O事件发生以后
异步I/O:(POSIX规范)用户能够直接对I/O进行读写操做,这些操做会告诉用户读写缓冲区的位置,以及操做完成后内核通知应用程序的方式缓存
两者核心区别:同步是用户本身处理I/O操做,异步I.O是内核执行I/O操做。
区别2:同步向应用程序通知二是I/O就绪事件,异步是I/O完成事件。服务器
linux下,aio.h 提供了对异步I/O的支持网络