From 53b9cde7684842e9910306bf7ec7cc1c4cdc9f03 Mon Sep 17 00:00:00 2001
From: Redkale <22250530@qq.com>
Date: Tue, 21 Mar 2017 13:39:37 +0800
Subject: [PATCH]
---
index.html | 6 ++++++
service.html | 4 ++--
source.html | 2 ++
3 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/index.html b/index.html
index 441f2b128..58d033a43 100644
--- a/index.html
+++ b/index.html
@@ -34,6 +34,7 @@
4、提供分布式与集中式部署的无缝切换
5、提供类似JPA功能,包含数据缓存自动同步、分表分库与简洁的数据层操作接口
6、支持依赖注入的资源的动态修改
+ 7、Servlet、Service、Source组件均支持异步接口
Redkale提供DataSource类对数据层进行操作,其功能类似JPA。最大程度的简化数据层的操作,免去SQL/JPQL语句的编写。同时提供过滤查询与JavaBean的结合、读写分离、数据库热切换、本地/远程部署、数据分表分库、进程间缓存自动同步等功能。
+ +Net、Service、DataSource、CacheSource都支持异步接口,本地模式、远程模式的Service均支持。
+ Github 源码 https://github.com/redkale
diff --git a/service.html b/service.html
index 952402b09..b972f7138 100644
--- a/service.html
+++ b/service.html
@@ -637,12 +637,12 @@
}
如上图DataSourceService的源码,当DataSource为本地实例时,异步接口(含AsyncHandler参数的)与同步接口执行流程相同。当DataSource为远程模式时,调用异步接口时,通信接口发到远程服务器时AsyncHandler参数的值传null,返回数据后再调用本地的AsyncHandler参数值执行。
- 异步调用方式是提高服务并发性的有效手段,特别是在远程模式Service比较多的情况下效果更明显。以HTTP服务为例,在Tomcat刚刚改版成NIO的时候,网上随处可见都是大谈NIO性能比BIO多好,认为BIO与NIO的不同,是BIO往往会引入多线程,每个连接一个单独的线程;NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。而事实上呢,通常还是通过增加线程数来提高并发量。为什么NIO作用不大呢, 因为一个HTTP动态请求耗时最多的业务逻辑层,IO操作的耗时比重小得多,只有在静态资源请求这种纯IO操作才能体现NIO、AIO(NIO.2)的优势。举例一个简单的数据查询请求,采用BIO方式耗时(为了方便比较将所耗时间扩大几倍)如下:
+ 异步调用方式是提高服务并发性的有效手段,特别是在远程模式Service比较多的情况下效果更明显。以HTTP服务为例,在Tomcat刚刚改版成NIO的时候,网上随处可见都是大谈NIO性能比BIO多好,认为BIO与NIO的不同,是BIO往往会引入多线程,每个连接一个单独的线程;NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。而事实上呢,通常还是通过增加线程数来提高并发量。为什么NIO作用不大呢, 因为一个HTTP动态请求耗时最多是业务逻辑层,特别是操作数据库,IO操作的耗时比重小得多,只有在静态资源请求这种纯IO操作才能体现NIO、AIO(NIO.2)的优势。举例一个简单的数据查询请求,采用BIO方式耗时(为了方便比较将所耗时间扩大几倍)如下:
1、服务器TCP连接开始到进入HttpServlet,耗时 10ms
2、用户态判断和参数验证, 耗时 10ms
3、调用远程数据源(DataSource)查询数据,耗时 150ms
4、数据序列化与response的IO输出, 耗时 10ms
- 如上描述,一个请求处理耗时 180ms,同时占用一个线程的时间也是 180ms。若换成NIO使IO耗时减少,为了方便计算假设IO耗时为0(当然实际情况是不可能的), 那么步骤1、4的耗时忽略不计,线程的占用时间由180ms变成160ms。 假设数据查询接口IO操作本身耗时也是10ms,那么有140ms是用于等待。若采用DataSource异步接口, 则140ms的等待时间可以释放当前线程资源。虽然整个请求的处理时间还是180ms,但是线程的占用时间却只有20ms。可以看出减少耗时多的步骤的等待时间才能事半功倍,大幅度地提高性能。异步接口的主要作用是远程请求在等待过程中释放当前线程资源。大大减少线程数,也减少大量线程之间的切换消耗。
+ 如上描述,一个请求处理耗时 180ms,同时占用一个线程的时间也是 180ms。若换成NIO使IO耗时减少,为了方便计算假设IO耗时为0(实际情况是不可能的), 那么步骤1、4的耗时忽略不计,线程的占用时间由180ms变成160ms。 假设数据查询接口IO操作本身耗时也是10ms,那么有140ms是用于等待。若采用DataSource异步接口, 则140ms的等待时间可以释放当前线程资源。虽然整个请求的处理时间还是180ms,但是线程的占用时间却只有20ms。可以看出减少耗时多的步骤的等待时间才能事半功倍,大幅度地提高性能。异步接口的主要作用是远程请求在等待过程中释放当前线程资源,大大减少线程数。