rust外围三角分离_Linux高性能服务器编程模式与Rust异步编程

本文探讨了Linux高性能服务器编程的需求,如效率、可用性和可扩展性,并介绍了IO模式,特别是Reactor模式。文章详细阐述了阻塞IO、非阻塞IO、同步IO和异步IO的概念,以及BIO和NBIO的优缺点。进一步讲解了Proactor和Reactor模型,以及在Rust中如何利用mio和futures库进行异步网络编程,如Tokio的特性与优势。
摘要由CSDN通过智能技术生成

本文同步与Linux高性能服务器编程模式 | Rust中文社区 本文时间:2018-11-21,作者:krircc, 简介:天青色

欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示

高性能服务器至少要满足如下几个需求:效率高:既然是高性能,那处理客户端请求的效率当然要很高了

高可用:不能随便就挂掉了

编程简单:基于此服务器进行业务开发需要足够简单

可扩展:可方便的扩展功能

可伸缩:可简单的通过部署的方式进行容量的伸缩,也就是服务需要无状态

而满足如上需求的一个基础就是高性能的IO!

讲到高性能IO绕不开Reactor模式,它是大多数IO相关组件如Netty、Redis在使用的IO模式

几乎所有的网络连接都会经过读请求内容——》解码——》计算处理——》编码回复——》回复的过程

Socket

Socket之间建立链接及通信的过程!实际上就是对TCP/IP连接与通信过程的抽象:服务端Socket会bind到指定的端口上,Listen客户端的"插入"

客户端Socket会Connect到服务端

当服务端Accept到客户端连接后

就可以进行发送与接收消息了

通信完成后即可Close

阻塞IO(BIO)、非阻塞IO(NBIO)、同步IO、异步IO一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作

阻塞IO和非阻塞IO的区别在于第一步:发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO;如果不阻塞,那么就是非阻塞IO

同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO

BIO优点模型简单

编码简单

BIO缺点性能瓶颈低

缺点:主要瓶颈在线程上。每个连接都会建立一个线程。虽然线程消耗比进程小,但是一台机器实际上能建立的有效线程有限,且随着线程数量的增加,CPU切换线程上下文的消耗也随之增加,在高过某个阀值后,继续增加线程,性能不增反降!而同样因为一个连接就新建一个线程,所以编码模型很简单!

就性能瓶颈这一点,就确定了BIO并不适合进行高性能服务器的开发!

NBIO:Acceptor注册Selector,监听accept事件

当客户端连接后,触发accept事件

服务器构建对应的Channel,并在其上注册Selector,监听读写事件

当发生读写事件后,进行相应的读写处理

优点性能瓶颈高

缺点模型复杂

编码复杂

需处理半包问题

NBIO的优缺点和BIO就完全相反了!性能高,不用一个连接就建一个线程,可以一个线程处理所有的连接!相应的,编码就复杂很多,从上面的代码就可以明显体会到了。还有一个问题,由于是非阻塞的,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值