文档章节

再说异步调用和NIO

令飞
 令飞
发布于 2015/08/15 11:47
字数 726
阅读 746
收藏 8

    之前的一篇博客阐述了在IO密集型事务中,使用异步调用的好处:http://my.oschina.net/zhenglingfei/blog/397514,本篇文章要说说使用异步调用和单纯使用NIO作为服务端的场景。

    目前大多是的java异步调用都是基于NIO来实现的 ,使用系统底层的select或epoll这样的模式,不过我要说的并不是这个,而是这里对于NIO的使用是用于客户端的,也就是调用者,才有了所谓的异步调用。这样的好处在于,调用者A对于服务端B有着大量的IO调用,而用异步的方式可以只用少量的线程去服务于大量的IO操作,而不同于传统的socket调用,一次调用发起便会阻塞调用线程,当调用量一大,自然cpu利用率下降。正如我第一篇文章所说。这边是用异步的好处,好处在于客户端,因此,这种形式一般适合于服务端间的调用,而非web端,移动端这样的调用,因为这种客户端本身的调用量就不大,异步更适合于SOA,微服务这样的服务化模式,有大量的服务间调用

    异步是针对客户端调用的好处,那么,nio用在服务端有什么好处呢,可以参见tomcat 6以后nio模式,个人认为,作为服务端,不存在调用阻塞的情况(如果有调用其他服务,这有属于作为客户端的范畴,这里不做考虑),此时采用nio模型的好处在于服务端可以同时监听多个连接,相比于传统的web服务器采用socket的模式,一次处理一个连接,然后交给一个线程处理,这类似一种生产消费者模式,生产者是对网络连接的处理,而消费者是对解码后的请求内容的业务处理,如果消费者速度恒定,那么整体吞吐能力在一定范围内会随着生产速度的提升而,因此对于业务处理简单的情况,消费者速度相对较快,因此,如果生产者较慢就会影响吞吐量。而且,对于并发量很大的服务,如日志服务,业务处理简单,但是量特别大,网卡很有可能被堵塞,并且整体吞吐也不高。

讲了这么多,是为了说明nio在服务端和客户端的区别,以便能更好的使用nio技术,后续会补上基于各种类型的业务的测试数据。

© 著作权归作者所有

共有 人打赏支持
令飞
粉丝 46
博文 21
码字总数 14127
作品 0
杭州
程序员
私信 提问
最近仔细研究了一下Java的NIO以及线程并发,搞清了点思路,特作笔记如下(NIO篇)

[转]http://www.cnblogs.com/feidao/archive/2005/07/15/193788.html 因为前段时间的项目需要写一些高性能服务器,结果写出来的结果是五花八门,我们要求使用NIO编写异步服务器,但是竟然有人...

风林火山
2010/12/26
0
1
求教一个系统设计的问题

假设当前Web系统,需要集成大量第三方系统API(服务不稳定、不可靠),各位大神,如何设计这个系统比较好一点,求指点,万分感谢! 以下是个人的拙见,求指点,主要考虑的点: 1、第三方系统...

Nice2018
06/25
193
3
SpringBoot | 第二十一章:异步开发之异步调用

前言 上一章节,我们知道了如何进行异步请求的处理。除了异步请求,一般上我们用的比较多的应该是异步调用。通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的。比如记录日...

oKong
08/17
0
0
初识NIO之Java小Demo

Java中的IO、NIO、AIO: BIO:在Java1.4之前,我们建立网络连接均使用BIO,属于同步阻塞IO。默认情况下,当有一条请求接入就有一条线程专门接待。所以,在客户端向服务端请求时,会询问是否有...

innoyiya
08/21
0
0
RPC-非阻塞通信下的同步API实现原理,以Dubbo为例

Netty在Java NIO领域基本算是独占鳌头,涉及到高性能网络通信,基本都会以Netty为底层通信框架,Dubbo 也不例外。以下将以Dubbo实现为例介绍其是如何在NIO非阻塞通信基础上实现同步通信的。 ...

echov
01/14
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
昨天
1
0

中国龙-扬科
昨天
1
0
假若明天来临——《AI.未来》读后感3900字

假若明天来临——《AI.未来》读后感3900字: 你有没有想过,如果有一天你被确诊为癌症患者,你会做些什么?你有没有想过,在你百年之后,你希望你的墓碑上刻写着什么内容? 在我翻开李开复老...

原创小博客
昨天
1
0
tomcat线程模型

Connector结构 BIO模式 NIO模式

grace_233
昨天
2
0
Javascript

变量定义 以$,_,字母开头 大小写敏感 var 关键字声明变量 声明未赋值undefined 数据类型 字符串,数字,布尔,数组,NULL,undefined 变量均为对象 函数 无默认值 var声明的是局部变量 函数外声明...

关元
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部