1、异步思想

一、异步思想

异步思想就是,当执行一项耗时的操作时,不去等待操作结束,而是给这个操作一个命令:当操作完成 后,接下来去执行什么。

异步模型不会阻塞线程等待资源,而是在资源准备好后,再通知业务代码来完成后续的资源处理逻辑。 通过减少或避免线程等待,只用很少的线程就可以达到超高的吞吐能力。

异步实现比较复杂,会降低代码的可读性和可维护性。所以在业务逻辑简单并且需要超高吞吐量,或者必须长时间等待资源的场景,考虑使用异步模型。 比如IO密集型系统,就比较适合使用异步设计提升性能。

二、异步网络通信

一个TCP连接建立后,应用程序会获取一个用于收发数据的channel,每个channel在内存中开辟两片区 域用于缓存收发数据。

发送数据:只要我们发送数据的速度没有超过网卡传输速度的上限,发送数据的耗时就只是一次内存写 耗时而已。所以发送数据时同步发送就可以了。
接收数据:对于数据接收方而言,不知道什么时候会接收到数据。比较好的方法就是实现异步接收数据 ,用少量的线程处理大量的连接,有数据的到来的时候可以第一时间处理。当有数据到来的时候,自动执行处理逻辑的回调方法。

传统的同步网络IO,采用的都是一个线程对应一个channel接收数据,很难支持高并发和高吞吐量。

1、Netty框架实现异步网络通信

Netty是一个全异步的设计,其底层是基于Java NIO实现的,不过Netty提供了一组非常友好的API, Netty自动解决了线程控制、缓存管理、连接管理这些问题。

需要实现的业务代码就两个部分:一是把服务初始化并启动起来,二是实现收发业务逻辑的Handler。

2、使用NIO实现异步网络通信

NIO提供了一个Selector对象来实现一个线程对应多个网络连接的多路复用机制, 你可以直接在这个线程里面执行接收数据的业务逻辑, 也可以将任务分发给其他的线程处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值