Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue

在学习完简单的网络编程后,我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... 


IO多路复用 

        ✨在上一节基于 TCP 协议 编写应用层代码时,我们通过一个线程处理连接的申请,随后通过多线程或者线程池来处理对每个客户端的请求;这样,一个客户端就对应一个线程。

        但随着客户端的数量不断增加,反复的创建和销毁线程,其开销都是很大的,哪怕是通过线程池处理,开销也是不容小觑的。

        ✨所以,为了解决这一问题,IO多路复用便诞生了:传统的IO操作是 阻塞式 的,当程序等待一个IO操作时,其他的IO操作会挂起,而 IO多路复用 允许程序同时监视多个 IO通道,从而不用为每个IO通道都单独地创建线程或进程。

        简单来说,就是一个线程就可以同时处理多个客户端的请求

        ✨举个例子:在大学生活中,给室友带饭是非常常见的的现象,假如你现在给两个室友带饭(总共买三份,你自己也得吃啊),你就要出去买三份晚餐,假设这三份晚餐都是在不一样的小吃摊贩卖的。

        这里的视角是,你是服务端,小吃摊老板是客户端,小吃摊老板做完后给你相当于给你发送请求,代入这个视角更好理解~~~

        第一种购买方案:你到了小吃摊A跟老板A说要一份晚餐,你等待老板A做完后,立刻去小吃摊B跟老板B说要一份晚餐,你等待老板B做完后,立刻去小吃摊C跟老板C说要一份晚餐,你等待老板C做完后;OK,此时全部请求处理完了。这里就相当于是单个线程处理完一个请求后立马处理下一个请求。

        第二种购买方案:你叫上其他两个认识的人(这里以甲乙丙代称),和你一起去买,到小吃摊A小吃摊A跟老板A说要一份晚餐,到小吃摊B跟老板B说要一份晚餐,到小吃摊C跟老板C说要一份晚餐;等到三份晚餐都做完后,全部请求也就处理完了。这里就相当于是创建了多个线程同时处理多个请求。

        第三种购买方案:依旧是你一个人买三份晚餐,但与第一种方案不同的是,你到了小吃摊A跟老板A说要一份晚餐,此时你立刻去小吃摊B跟老板B说要一份晚餐,随后又去吃摊C跟老板C说要一份晚餐;然后你就开始等他们做了,小吃摊A老板A做完后,你去拿,小吃摊B老板B做完后,你去拿,小吃摊C老板C做完后,你去拿;拿完全部之后,全部请求也就处理完了。这里就只用了一个线程就同时处理了多个请求。这便是 IO多路复用 的形象比喻

        ✨一般来说,绝大部分客户端,大部分时间都是沉默的,虽然连接了,但不会一直发送请求,此时工作线程等待就行了,等到客户端发来请求后,工作线程处理就OK了;很小的概率会说多个客户端同时发送请求的,这时候就灵活切换到线程池就可以了~~~

        ✨目前,IO多路复用 是服务器开发中主流的核心技术;不过这并不需要程序员自己实现,这是操作系统内置的,只需要调用API即可Java通过 NIO 封装了 IO多路复用


❤️以下是GPT-4o对 IO多路复用 的简单讲解:

IO 多路复用(I/O Multiplexing)

IO 多路复用是一种高效管理多个 IO 通信通道的技术,常用于需要同时处理多个网络连接或文件描述符的场景,比如高并发服务器的设计。它通过一种机制,让程序可以同时监听多个 IO 事件(如读、写、错误),并根据事件的发生进行相应处理。


1. 什么是 IO 多路复用?

传统的 IO 操作是 阻塞式 的,当程序等待一个 IO 操作完成时,其他的 IO 操作会被挂起。IO 多路复用允许程序同时监视多个 IO 通道,而不用为每个通道都创建独立的线程或进程。


2. 核心思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值