【网络编程】-应用篇

入门知识:【网络编程】-通识篇

一、高性能IO

高并发编程–Reactor模式与Proactor模式

Reactor: 来了事件,操作系统通知应用进程,让应用进程来处理。
Procetor:来了事件,【操作系统来处理】,处理完成后通知应用进程。

(一)Reactor模型

Reactor是 【多路复用select】 + 后续处理分发

单Reactor单线程

在这里插入图片描述

单Reactor多线程

在这里插入图片描述

多Reactor多线程(Netty)

在这里插入图片描述 在这里插入图片描述

(二)Proactor 模式

和 Linux 不同,Windows 下实现了一套完整的支持套接字的异步编程接口,这套接口一般被叫做 IOCompletetionPort(IOCP)。

基于 IOCP 的 Proactor 模式

和 Reactor 模式一样,Proactor 模式也存在一个无限循环运行的 event loop 线程。
但是不同于 Reactor 模式,这个线程并不负责 I/O 调用read/write,它只是负责在的 read、write 操作完成的情况下,分发完成事件到不同的处理函数。

但是我们服务器通常部署在Linux下,所以暂时不做研究。

二、应用

  • Redis:能同时和成百上千个客户端进行交互。通过事件驱动框架,Redis 可以使用一个循环来不断捕获、分发和处理客户端产生的网络连接、数据读写事件。

  • Nginx:采用多 Reactor 多进程模型,不过与标准的多 Reactor 多进程模型有些许差异。Nginx 的主进程只用来初始化 socket,不会 accept 连接,而是由子进程 accept 连接,之后这个连接的所有处理都在子进程中完成。

  • nginx:nginx是多进程模型,master进程不处理网络IO,每个Wroker进程是一个独立的单Reacotr单线程模型。

  • netty:通信绝对的王者,默认是多Reactor,主Reacotr只负责建立连接,然后把建立好的连接给到从Reactor,从Reactor负责IO读写。当然可以专门调整为单Reactor。

  • kafka:kafka也是多Reactor,但是因为Kafka主要与磁盘IO交互,因此真正的读写数据不是从Reactor处理的,而是有一个worker线程池,专门处理磁盘IO,从Reactor负责网络IO,然后把任务交给worker线程池处理。

(一)Netty

多Reactor多线程
在这里插入图片描述

(二)Redis

Redis6.0之前

在这里插入图片描述

Redis6.0

网络IO读写,使用多线程处理
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机智的路易

用爱发电是走不远的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值