一个良好的服务框架是不应该让业务逻辑阻塞IO操作的。
比如客户端调用一个远程业务方法需要500ms才能返回。那么server的其他io线程不应该受到影响,同样能在500ms返回。
现在是一段测试代码:
python:
import threading DBOSS={ "dboss":{ "locations":["localhost:8989"], "references":[ { "id":"blogQueryService", "version":"1.0" } ] }, } from dboss import DuitangRemoteProxy proxy = DuitangRemoteProxy(DBOSS) blogQueryService = proxy.getService('blogQueryService') import time from time import sleep class TestThread(threading.Thread): def run(self): while True: starttime = time.time() blogQueryService.testString("ok") endtime = time.time() exe_time = (endtime - starttime)*1000 print 'cost %s'%exe_time sleep(0.1) for i in xrange(5): t = TestThread() t.start()
java:
public class BlogQueryServiceImpl implements BlogQueryService { public String testString(String str) { System.out.println(Thread.currentThread().getName()); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } return str; } }
dboss:
public class DbossTester { public static void main(String[] args) { ServiceRemoting serviceRemoting = new NioServiceRemoting(); DataResolverFactory dataResolverFactory = DataResolvers.getDataResolverFactory(); ServiceRegister serviceRegister = new ServiceRegister(); serviceRegister.registe("blogQueryService", new BlogQueryServiceImpl()); serviceRemoting.init(new ServiceContextImpl(serviceRegister, dataResolverFactory)); serviceRemoting.start(8989); } }
测试结果:
python:
Thread-1 cost 504.622936249
Thread-2 cost 509.635925293
Thread-3 cost 509.853124619
Thread-4 cost 510.01906395
Thread-5 cost 1002.29907036
Thread-1 cost 501.371860504
Thread-2 cost 501.34396553
Thread-3 cost 500.792980194
Thread-4 cost 793.460130692
Thread-1 cost 501.65104866
Thread-2 cost 501.611948013
Thread-3 cost 501.570940018
Thread-5 cost 801.206111908
Thread-4 cost 801.896095276
Thread-2 cost 501.791000366
java:
New I/O server worker #1-1
New I/O server worker #1-2
New I/O server worker #1-2
New I/O server worker #1-1
New I/O server worker #1-4
New I/O server worker #1-3
New I/O server worker #1-2
New I/O server worker #1-4
New I/O server worker #1-3
New I/O server worker #1-1
New I/O server worker #1-2
由于netty默认只启动4个io thread,当有超过4个connection请求时,就会出现io被阻塞的情况,所有python端出现1000ms的情况。
通常不应该让io thread直接处理work,下面是测试20个并发,biz service耗时10ms的情况:
Thread-9 cost 21.9979286194
Thread-5 cost 11.8389129639
Thread-13 cost 21.8431949615
Thread-10 cost 12.4440193176
Thread-18 cost 21.8789577484
Thread-19 cost 19.7048187256
Thread-16 cost 11.6169452667
Thread-7 cost 11.8520259857
Thread-1 cost 12.0470523834
Thread-17 cost 11.5780830383
Thread-2 cost 11.9531154633
Thread-3 cost 11.9800567627
Thread-11 cost 11.9431018829
Thread-14 cost 12.2349262238
Thread-12 cost 11.5549564362
Thread-20 cost 12.4790668488
Thread-8 cost 11.3768577576
Thread-4 cost 11.3980770111
Thread-6 cost 11.8780136108
Thread-15 cost 11.5919113159
Thread-9 cost 13.9129161835
Thread-13 cost 11.4369392395
Thread-5 cost 21.9550132751
netty提供了ExecutionHandler来处理:
pipeline.addLast("executor", new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16, 1048576, 1048576)));
python:
Thread-4 cost 11.6369724274
Thread-5 cost 12.0570659637
Thread-6 cost 11.7981433868
Thread-7 cost 11.6400718689
Thread-8 cost 11.7359161377
Thread-9 cost 11.7650032043
Thread-12 cost 11.8789672852
Thread-11 cost 11.7127895355
Thread-14 cost 11.8279457092
Thread-13 cost 11.8789672852
Thread-10 cost 11.7909908295
Thread-15 cost 11.3301277161
Thread-17 cost 11.6529464722
Thread-18 cost 12.1729373932
Thread-16 cost 12.4118328094
Thread-19 cost 11.7380619049
Thread-20 cost 11.757850647
Thread-3 cost 12.0511054993
Thread-1 cost 11.9280815125
Thread-2 cost 12.1569633484
Thread-4 cost 11.3790035248
java:
pool-41-thread-14
pool-42-thread-1
pool-42-thread-3
pool-41-thread-16
pool-39-thread-14
pool-42-thread-5
pool-42-thread-7
pool-39-thread-16
pool-41-thread-2
pool-38-thread-14
pool-41-thread-4
pool-39-thread-2
pool-42-thread-9
pool-38-thread-16
pool-40-thread-2
pool-42-thread-11
pool-39-thread-4
pool-40-thread-4
pool-39-thread-6
pool-42-thread-13
pool-38-thread-2
pool-40-thread-6
pool-40-thread-8
pool-38-thread-4
pool-42-thread-15
pool-39-thread-8
pool-39-thread-10
pool-42-thread-1
pool-38-thread-6
pool-40-thread-10
pool-38-thread-8
pool-42-thread-3
pool-39-thread-12
相关推荐
DBOSS和BOSS15接口业务消息规范标准.doc
绝对是反编译工具中的神器,安装后直接鼠标右键一键反编译,回编译,非常方便, 这是今年最新版2.0.0,本人已在使用中, 推荐给大家。 备注:《Android APK+Dex文件反编译及回编译工具(APKDB)》 简称:APKDB ...
unity超精致BOSS模型(含动作) FBX格式文件,高模!大家快来下载吧!
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
SATA命令协议文档,新手必学,高手必经之路的利器。
白色大气风格响应式产品展示企业网页模板.zip
内容概要:文章介绍了如何使用Python开发一个简单的自动点餐程序。该程序通过显示菜单、接收用户点单输入并记录订单详情,最终计算总费用,展示了基础的交互流程和订单处理方法。 适合人群:Python初学者,对交互式程序设计感兴趣的学习者。 使用场景及目标:适用于希望了解基本交互式应用程序开发流程的新手程序员,目标是掌握Python中的函数定义、数据结构使用、流程控制以及简单的用户交互技术。 阅读建议:跟随程序步骤实践,尝试扩展或优化现有功能,如加入折扣计算、订单存储等功能,以增强理解和编程能力。
白色大气风格的境外游景区模板下载.zip
白色大气风格的商业模板下载.zip
华豫佰佳组合促销视图.sql
白色创意风格的室内装修设计CSS3模板.zip
platform-tools-latest-darwin.zip
CH579 以太网转串口 串口服务器代码 需要自己编程提升能力的非常值得参考的代码 几乎所有的编程思路编程技巧资源都涉及到了,代码简单易懂 ,注释清楚,本代码实现最串口服务器的功能,有电路图。
白色非常简洁的商务网站模板下载.zip
白色大气风格的美食DIY应用APP官网模板.zip
白色大气风格的女性风衣企业网站模板.zip
1. 平台在家电和电子产品方面的营运情况如何? 2. 哪些品牌和类别销量最高? 3. 用户消费规律 4. 哪些是我们的重点用户? 5. 平台有哪些优势和不足,需要如何改进?
白色大气简洁的汽车配件商城整站网站模板下载.zip
白色简洁的数码相机商城整站网站模板下载.zip