Netty学习前的基础知识(六):Doug Lea的nio文档学习之古典的网络编程服务设计

232 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

背景

学习Netty之前,学习Doug Lea的nio知识。Doug Lea是包 java.nio 的作者。


Classic Service Designs(古典的网络编程服务设计)
  1. Web services, Distributed Objects, etc. Most have same basic structure: Read request;Decode request;Process service; Encode reply ;Send reply . But differ in nature and cost of each step XML parsing, File transfer, Web page generation, computational services.

在这里插入图片描述 2. 典型的模式:一请求一线程一应答。服务对客户端发来的每个请求都会创建一个线程。 3. 实现伪代码 在这里插入图片描述 4. 需要实现的一些目标

a) 如果客户端非常多的情况下,只能持续添加硬件(CPU,memory,disk,bandwidth)来满足。

b) 如何满足低延迟,大量请求?

  1. 方法 a)分而治之设计。把单线程处理的所有事情分拆分成一个个小任务去执行,并且每个小任务都是由线程池去处理的。 在这里插入图片描述

b)事件驱动设计 。把执行过程设计成异步的。注册事件,事件发生,监听事件发生。

c) Reactor设计。Reactor responds to IO events by dispatching the appropriate handle. Handlers perform non-blocking actions. Manage by binding handlers to event.

小结
  1. 学习古典的网络编程服务设计方式,并理解它的缺陷。一请求一线程一应答,非常消耗资源。

  2. 梳理网络编程需要实现的目标,在有限的资源条件下,支撑更多的客户端发来大量的请求。

  3. 采用分而治之的思想和事件驱动模式及其Reactor论文中提到的Reactor模式,进行编程。