文档章节

再说异步调用和NIO

令飞
 令飞
发布于 2015/08/15 11:47
字数 726
阅读 731
收藏 8
点赞 0
评论 0

    之前的一篇博客阐述了在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
Linux IO模型与Java NIO

概述 看Java NIO一篇文章的时候又看到了“异步非阻塞”这个概念,一直处于似懂非懂的状态,想解释下到底什么是异步 什么是非阻塞,感觉抓不住重点。决定仔细研究一下。 本文试图研究以下问题...

yingtju
06/29
0
0
RPC-非阻塞通信下的同步API实现原理,以Dubbo为例

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

echov
01/14
2
0
servlet3异步原理与实践

一、什么是Servlet servlet 是基于 Java 的 Web 组件,由容器进行管理,来生成动态内容。像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节...

新栋BOOK
2017/10/23
0
0
Java IO: BIO, NIO, AIO(含代码实现)

BIO, NIO, AIO,本身的描述都是在Java语言的基础上的。 而描述IO,我们需要从三个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO, NIO, AIO以Java的角度理解: BIO,同步阻塞式IO,简...

tantexian
2016/05/11
385
0
Java BIO、NIO、AIO 比较

理解一下概念,以银行取款为例 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读...

Corlang
2016/02/01
94
0
第一章:Netty介绍

整个Netty的API都是异步的。 Callbacks(回调) 下面代码是一个简单的回调: Fetcher.fetchData()方法需传递一个FetcherCallback类型的参数,当获得数据或发生错误时被回调。 FetcherCallback....

李矮矮
2016/09/23
22
0
Java BIO、NIO、AIO 学习

先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写)。 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时...

小七_Dream
2015/09/18
160
0
servlet3异步原理与实践

一、什么是Servlet servlet 是基于 Java 的 Web 组件,由容器进行管理,来生成动态内容。像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式,被编译为平台无关的字节...

新栋BOOK
2017/10/24
0
5
Web服务请求异步化介绍(概念篇)

Author:放翁(文初) Date: 2010/6/28 Email:fangweng@taobao.com 围脖: http://t.sina.com.cn/fangweng 前话 在前面的文章中,先给出了Web服务请求异步处理的压力测试报告,从数据角度描述...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
10分钟前
0
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
10分钟前
6
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
20分钟前
0
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
22分钟前
0
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
25分钟前
0
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
28分钟前
0
0
javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
31分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
36分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
39分钟前
0
0
RobotThread.cpp

#include "RobotThread.h"RobotThread::RobotThread(int argc, char** pArgv, const char * topic) :m_Init_argc(argc), m_pInit_argv(pArgv), m_topic(topic){/** ......

itfanr
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部