linux 高性能 服务器,linux高性能服务器读书笔记之服务器模型

1.模型一:C/S(经典的)

起因:TCP/IP协议是没有客户和服务端的区别。但是资源(视频,新闻,软件)都是被数据提供者所垄断

逻辑:服务器启动后,首先创建一个或多个监听socket,并且调用bind函数将其绑定到需要(自定义)的端口,然后调用listen函数等待客户连接

特点:客户连接是随机事件,需要某种I/O模型来监听连接。

例子:服务器I/O复用技术之一的select系统调用

(当监听接收到连接 ,服务器用accept来接收,并且分配一个逻辑单元为它服务,(fork系统产生逻辑单元,逻辑单元处理好一切返回给客户端,逻辑单元可以是新创建的子进程,子线程或其他)))

2.接下来就是宅男熟悉的P2P模型

优势:就是去掉通信的中心

特点;就是每台机器在消耗服务的时候也会给别人提供服务

例子:迅雷,云计算机群

问题:主机相互之间很难发现(发现服务器来解决这个问题)

但是本质还是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的支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值