Netty(一)IO模型】的更多相关文章

概述 Netty其实就是一个异步的.基于事件驱动的框架,其作用是用来开发高性能.高可靠的IO程序. 因此下面就让我们从Java的IO模型来逐步深入学习Netty. IO模型 IO模型简单来说,就是采用如何的方式来进行数据的接受和发送,因为存在着发送方和接收方两个角色,因此IO模型一般分为以下3类:BIO(同步阻塞).NIO(同步非阻塞).AIO(异步非阻塞).其3者的区别如下: BIO:是最传统的Java IO模型,采用的方式为服务器新接受到一个连接,就建立一个线程,但是如果这个连接不做任何事情…
从今天开始我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架. 它的设计异常优雅简洁,扩展性高,稳定性强.拥有非常详细完整的用户文档. 同时内置了很多非常有用的模块基本上做到了开箱即用,用户只需要编写短短几行代码,就可以快速构建出一个具有高吞吐,低延时,更少的资源消耗,高性能(非必要的内存拷贝最小化)等特征的高并发网络应用程序. 本文我们来探讨下支持Netty具有高吞吐,低延时特征的基石----netty的网络IO模型. 由Netty的网络IO模型开始,我们来…
一:NETTY 是什么? Netty 是什么?  这个问题其实百度上一搜一堆. 这是官方话的描述:Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户.服务端应用.Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发. 其实没那么复杂,用通俗易懂的话来讲: 1.1  NETTY  是一个框架 NETTY 是一个框架, 这个框架做了什么事情了,做了一件 Rpc 底层通…
NIO 概述 前面说到 BIO 有着创建线程多,阻塞 CPU 等问题,因此为解决 BIO 的问题,NIO 作为同步非阻塞 IO模型,随 JDK1.4 而出生了. 在前面我们反复说过4个概念:同步.异步.阻塞.非阻塞.因此,我们就首先用最简单的语言说一下他们的区别,这里,我们心里暂时有个概念即可,在后面的学习过程中,还会对其进行深入的探讨学习. 概念对比 首先,我们先要确立一个概念,就是一个IO操作其实是分为两步的, 发起IO请求,即准备数据和区域: 实际的IO操作. 而区分一个 IO模型是同步还…
引言 IO模型就是操作数据输入输出的方式,在Linux系统中有5大IO模型:阻塞式IO模型.非阻塞式IO模型.IO复用模型.信号驱动式IO模型.异步IO模型. 因为学习Netty必不可少的要了解IO多路复用模型,本篇是基础. 名词概念 阻塞:指向调用方,在调用结果返回之前,调用方线程会挂起,直到结果返回. 非阻塞:指向调用方,在调用结果返回之前,调用方线程会处理其他事情,不会阻塞. 同步:指向被调用方,被调用方得到结果后再返回给调用方. 异步:指向被调用方,被调用方先应答调用方,然后计算结果,最…
目录 1.1 同步.异步.阻塞.非阻塞     同步 VS 异步         同步         异步     阻塞 VS 非阻塞         阻塞         非阻塞     举例         1)同步阻塞         2)同步非阻塞         3)异步阻塞         4)异步非阻塞 1.2 Linux IO模型     IO执行的两个阶段     Linux的5种IO模型     五种IO模型比较 1.3 JDK IO发展(BIO--->NIO--->AI…
提起IO模型首先想到的就是同步,异步,阻塞,非阻塞这几个概念.每个概念的含义,解释,概念间的区别这些都是好理解,这里深入*nix系统讲一下IO模型. 在*nix中将IO模型分为5类. Blocking I/O Nonblocking I/O I/O Multiplexing (select and poll) Signal Driven I/O (SIGIO) Asynchronous I/O (the POSIX aio_functions) 阻塞 I/O(blocking IO) 如图所示,…
在进入主题之前先看个 Java 网络编程的一个简单例子:代码很简单,客户端和服务端进行通信,对于客户端的每次输入,服务端回复 get.注意,服务端可以同时允许多个客户端连接. 服务端端代码: // 创建服务端 socket ServerSocket serverSocket = new ServerSocket(20000); client = serverSocket.accept(); // 客户端连接成功,输出提示 System.out.println("客户端连接成功"); /…
Linux的内核将所有外部设备都看做一个文件来操作,对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符).而对一个Socket的读写也会有相应的描述符,称为Socketfd(Socket描述符),描述符就是一个数字,它指向内核中的一个结构体(结构体,C/C++数据类型,类似Java中的类,存储各种不同类型的数据,这里存储的是文件路径.数据区等一些属性). 根据UNIX网络编程对I/O模型的分类,UNIX提供了5种I/O模型,分别为: 1.阻塞I…
引言  从 T 跳槽到 A 之后,我的编程语言也从 C++ 转为 了 Java.在 T 做的偏服务器端开发,而在 A 更偏向于业务开发.上周在 A 公司组内做了一个<服务器端高性能网络编程>的分享,我讶异于组内的十个人竟然没有一个人做过直接基于 TCP/IP 协议的开发,更多的是 Web 后台的业务开发.连 Java 最强大的网络库 Netty,用过的人也只有一个.但也不难理解---A 公司的中间件平台,将业务与底层进行了隔离,让程序员可以专心于业务开发. 孰优孰劣?不能一概而论,还记得跳槽…