一个良好的服务框架是不应该让业务逻辑阻塞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格式文件,高模!大家快来下载吧!
"HFSS软件包下的圆锥(圆形)喇叭天线模型制作与参数调整:自主创造,实验验证,全流程教程指导",HFSS圆锥(圆形)喇叭天线 天线模型,自己做的,附带结果,可改参数,HFSS软件包 (有教程,具体到每一步,可以自己做出来) ,HFSS; 圆锥(圆形)喇叭天线; 模型自制; 参数可改; HFSS软件包; 教程详尽。,HFSS圆锥喇叭天线模型:可自定义参数与结果
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
"基于S7-200 PLC与组态王技术构建的智能化新能源汽车电池检测系统上位机软件平台",基于S7-200plc与组态王组态的新能源汽车电池检测系统上位机 ,S7-200plc;组态王组态;新能源汽车电池检测系统;上位机,"基于PLC与组态王的汽车电池检测上位机系统"
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
nodejs010-nodejs-docs-0.10.5-8.el6.centos.alt.x86_64.rpm
免费JAVA毕业设计 2024成品源码+论文+录屏+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
“基于Cadence Orcad的全面元器件数据库管理系统——全配版与基础版对比分析”,搭建使用Cadence Orcad CIS元器件数据库(默认为Access数据库,如需MySQL数据库需提前沟通),含orcad符号库,Allegro PCB库 —————————————————— 该元器件数据库种类丰富,大分类就有28种(全配版,含有很多如海思,全志,瑞芯微,TI,Xilinx等主流复杂IC的库信息),20种(基础版)。 ———————————————————— 全配版包含1000多种元器件属性信息汇总,都是已验证使用过的,可直接用于自己的电路设计。 全配版还附有大部分与元器件PCB封装已匹配好的的3D模型。 强烈建议原理图库及封装库基于数据库的方式来管理,好处主要有以下几点: 1. 易于管理,可通过数据库文件批量添加、更改或删除器件参数; 2. 减少原理图库的种类, 同类器件只需要新建一次原理图库, 例如不同阻值、精度的电阻; 3. 器件具有唯一性, 每个器件的参数都是唯一的; 4. 方便使用, 如使用 Link Database Part 功能,可以快速完成器件批量替,
1、文件内容:ptlib-devel-2.10.10-6.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ptlib-devel-2.10.10-6.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
西门子S7-1200+5轴伺服驱动系统的走工艺对象技术解析——采用脉冲输出驱动方式的控制方法及在全博途V15.1程序中的应用研究。,S7-1200+5轴伺服 走工艺对象 脉冲输出驱动方式 适用于西门子s7-1200+第三方伺服驱动器 全套博途v15.1程序 ,S7-1200;5轴伺服;走工艺对象;脉冲输出驱动方式;第三方伺服驱动器;博途v15.1程序,西门子S7-1200 5轴伺服系统控制程序
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
《四层三列堆垛式立体库控制系统:带解释的梯形图接线原理图及IO分配与组态画面详解》,4x3堆垛式立体库4层3列四层三列书架式立体库控制系统 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,立体库; 堆垛式; 控制系统; 梯形图; 接线图; 原理图; IO分配; 组态画面,"立体库控制系统原理图:四层三列堆垛式书架的IO分配与组态画面"
1、文件内容:pyOpenSSL-0.13.1-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/pyOpenSSL-0.13.1-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装
免费JAVA毕业设计 2024成品源码+论文+数据库+启动教程 启动教程:https://www.bilibili.com/video/BV1SzbFe7EGZ 项目讲解视频:https://www.bilibili.com/video/BV1Tb421n72S 二次开发教程:https://www.bilibili.com/video/BV18i421i7Dx
基于三菱PLC与MCGS技术的防盗门报警系统:梯形图接线图原理及IO分配、组态画面详解,基于三菱PLC和MCGS的防盗门报警器 带解释的梯形图接线图原理图图纸,io分配,组态画面 ,三菱PLC; MCGS; 防盗门报警器; 梯形图接线图; IO分配; 组态画面,基于三菱PLC与MCGS的报警器系统:梯形图接线与组态画面详解
"COMSOL金膜表面等离子共振(SPR)分析:不同入射角下的共振角度观察",comsol金膜表面等离子共振SPR,不同入射角查看共振角度 ,关键词:comsol金膜表面;等离子共振(SPR);不同入射角;共振角度;分离度;角度调节;材料表面光;生物传感;互动现象;实时分析,"COMSOL研究金膜表面等离子共振: 角度变化影响共振角度"
1. 机器学习与深度学习 机器学习是人工智能的核心领域,旨在通过数据训练模型,使计算机能够从经验中学习和改进。监督学习、无监督学习和强化学习是其主要分支,广泛应用于图像识别、语音处理和预测分析等场景。深度学习作为机器学习的重要子领域,通过神经网络模拟人脑的工作机制,尤其在图像分类、自然语言处理和自动驾驶等领域取得了突破性进展。深度学习模型如卷积神经网络(CNN)和循环神经网络(RNN)已成为许多AI应用的基础。 2. 自然语言处理与计算机视觉 自然语言处理(NLP)使计算机能够理解、生成和处理人类语言,关键技术包括机器翻译、语音识别、情感分析和问答系统。例如,智能助手(如Siri、Alexa)和聊天机器人(如ChatGPT)都依赖于NLP技术。计算机视觉则让计算机能够“看懂”图像和视频,广泛应用于人脸识别、自动驾驶、医疗影像分析等领域。目标检测、图像分割和视频分析等技术正在推动安防、零售和制造业的智能化转型。 3. 强化学习与AI伦理 强化学习通过试错和奖励机制,训练智能体在复杂环境中做出最优决策,广泛应用于游戏AI(如AlphaGo)、机器人控制和资源调度等领域。与此同时,随着AI技术的快速发展,AI伦理和社会影响也成为重要研究方向。如何确保AI的公平性、透明性和隐私保护,以及应对AI对就业和社会结构的潜在影响,已成为学术界和产业界共同关注的焦点。AI的可持续发展离不开技术与伦理的平衡。
不同放牧策略对草原土壤性质的影响研究——基于机器学习.pdf