`
san_yun
  • 浏览: 2638776 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

dboss的非阻塞IO

 
阅读更多

一个良好的服务框架是不应该让业务逻辑阻塞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

 

 

 

  • 大小: 16.9 KB
分享到:
评论

相关推荐

    DBOSS和BOSS15接口业务消息规范标准.doc

    DBOSS和BOSS15接口业务消息规范标准.doc

    Android反编译及回编译工具包Apkdb 2.0最新版

    绝对是反编译工具中的神器,安装后直接鼠标右键一键反编译,回编译,非常方便, 这是今年最新版2.0.0,本人已在使用中, 推荐给大家。 备注:《Android APK+Dex文件反编译及回编译工具(APKDB)》 简称:APKDB ...

    unity超精致BOSS模型(含动作)

    unity超精致BOSS模型(含动作) FBX格式文件,高模!大家快来下载吧!

    机械原理课程设计 破碎机.doc

    机械原理课程设计 破碎机.doc

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文施密特触发器电子设计论文施密特触发器

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    电子设计论文往返式流动灯电子设计论文往返式流动灯

    基于深度学习来实现序列到序列.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    美国扩大电动汽车充电基础设施政策(英文).pdf

    政策背景与动机: 签署法案:2021年11月15日,拜登总统签署了《基础设施投资和就业法案》(IIJA),旨在通过多项措施推动美国电动汽车充电基础设施的扩张。 市场增长:随着电动汽车市场的快速增长,对充电基础设施的需求也日益增加,政府政策成为推动这一发展的关键力量。 电动汽车充电基础: 充电技术:电动汽车充电技术通常分为三级,各级充电速度和功率不同,满足不同场景下的充电需求。 充电站类型:包括公共、私人及工作场所充电站,各自具有不同的访问限制和使用特点。 市场趋势与现状: 市场增长:EV市场增长依赖技术进步、成本降低及充电便利性的提高。 充电站数量:截至2022年10月,美国公共和私人充电站总数超过50,000个,其中93%为公共充电站。 区域差异:充电站分布存在地区差异,部分低收入社区充电基础设施不足。 政策与项目: NEVI公式计划:通过IIJA设立的国家电动汽车基础设施(NEVI)公式计划,为各州提供资金以建设EV充电站。 税收抵免:扩展了替代燃料汽车加油站的税收抵免政策,包括EV充电站,以激励投资者。 联合办公室:DOT和DOE成立联合办公室,负责NEVI计划的实施和监管,确保

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    电子设计论文照明过暗提醒电路电子设计论文照明过暗提醒电路

    前端,HTML+CSS的综合案例,网页开发

    我选用的软件是:Visual Studio CODE,这个软件在前端开发中十分常用,且提供了很大的便利。 当然也可以用记事本开发,记得把后缀名改成.html 还有我的CSS使用的是内部样式表。 写在head标签下。用到的标签有  <h1></h1>    <img src="lyf.jpg" class="god">     <p>    </p> 就是这三个标签,构成了HTML的主体架构。 而CSS则是设置了以下形式。 font-size: 16px;             line-height: 32px;             font-family: "Microsoft Yahei";             text-align: left;             text-indent:2em;          text-decoration: none;             color: #888888         width:66px

    MFC MAPI 源码和可执行文件

    大名鼎鼎的MFC MAPI 源码和可执行文件,是开发OUTLOOK插件的好帮手。

    机械原理课程设计插床机构机械设计.doc

    机械原理课程设计插床机构机械设计.doc

    基于深度学习的音频分类 前端App.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    基于BERT模型的深度学习中文文本分类实现,包含大约20000条新闻的训练和测试集,包装有简单HTTP接口可供调用。.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    《化工设备机械基础》课程设计 IB储罐设计.doc.doc

    机械原理课程设计网球自动捡球机.doc

    机械原理课程设计网球自动捡球机.doc

    EKFUKFCKF录屏.mp4

    EKFUKFCKF录屏.mp4

    仿新浪读书小程序源码学习

    仿新浪读书小程序源码学习

    基于科大讯飞AI营销算法比赛实现CTR深度学习方法.zip

    深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。

    ecbbc商城系统源码 BSD开源协议多商户购物商城系统

    ecbbc多商户系统BSD开源协议,和yii2框架一样的开源协议,做国内首款真正开源BSD的多商户系统,欢迎大家研究学习,商用项目使用。Fecbbc多商户购物商城系统BSD一:多商户介绍Fecbbc多商户系统正式开源免费,BSD开源协议,和yii2框架一样的开源协议,真正商用免费授权。做国内首款真正开源BSD的多商户系统,欢迎大家研究学习,商用项目使用。

Global site tag (gtag.js) - Google Analytics