美文网首页Netty框架源码分析
3.Netty框架-网络IO编程模板(BIO编程模型)

3.Netty框架-网络IO编程模板(BIO编程模型)

作者: 还算年轻 | 来源:发表于2020-08-06 10:23 被阅读0次

一、BIO通信模型:

BIO带来的问题:

    从服务端代码中我们可以看到,在传统的IO模型中,每个连接创建成功之后都需要一个线程来维护,每个线程包含一个while死循环,那么1w个连接对应1w个线程,继而1w个while死循环,这就带来如下几个问题:

    线程资源受限:线程是操作系统中非常宝贵的资源,同一时刻有大量的线程处于阻塞状态是非常严重的资源浪费,操作系统耗不起

    线程切换效率低下:单机cpu核数固定,线程爆炸之后操作系统频繁进行线程切换,应用性能急剧下降。

    除了以上两个问题,IO编程中,我们看到数据读写是以字节流为单位,效率不高。

    为了解决这三个问题,JDK在1.4之后提出了NIO。

二、伪异步IO通信模型:

三、Socket通信模型:

一、什么是socket?

TCP/IP 结构:

Socket是什么呢? 

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 

一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。 

    先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

Socket解决了什么? 

1、网络中进程之间如何通信? 

本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:

消息传递(管道、FIFO、消息队列) 

同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 

共享内存(匿名的和具名的) 

远程过程调用(Solaris门和Sun RPC) 

网络的进程间通信:

首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的。其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(socket)和UNIX System V的TLI(已经被淘汰),来实现网络进程之间的通信。就目前而言,几乎所有的应用程序都是采用socket,而现在又是网络时代,网络中进程通信是无处不在,这就是我为什么说“一切皆socket”。

四、BIO阻塞在哪里:

相关文章

  • 3.Netty框架-网络IO编程模板(BIO编程模型)

    一、BIO通信模型: BIO带来的问题: 从服务端代码中我们可以看到,在传统的IO模型中,每个连接创建成功之后都需...

  • 从零开始netty学习笔记之BIO

    BIO即Block IO,阻塞式IO。网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相...

  • IO模型

    IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,A...

  • Java-网络编程-BIO&NIO&AIO

    一、IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO...

  • 网络编程

    一、IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: BIO NI...

  • 【Netty开发指南】搭稳Netty开发的地基

    Linux网络编程5种IO模型 根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞I...

  • BIO/NIO/AIO的几个思考

    BIO/NIO/AIO中的IO指的是什么?为什么网上一讲到BIO/NIO/AIO就是Socket编程、网络编程bl...

  • Java阻塞式IO通信

    阻塞式IO通信 一、BIO通信介绍 网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互...

  • UNIX中的五种I/O模型

    在Java网络编程中,应用的较多的主要有BIO,NIO俩种模型,前者为传统的阻塞IO模型,后者为Java1.4后来...

  • BIO、NIO、AIO 个人总结

    BIO(blocking io) BIO即为阻塞IO,在网络编程中,它会在建立连接和等待连接的对端准备数据阶段进行...

网友评论

    本文标题:3.Netty框架-网络IO编程模板(BIO编程模型)

    本文链接:https://www.haomeiwen.com/subject/nbhyrktx.html