注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小葫芦君(汉斯的博客)

博客迁移到新博客:https://blog.ssxingshou.com

 
 
 

日志

 
 
关于我

小小葫芦商城,为您提供高品质的商品,一流的产品,一流的包装服务,一流的物流服务,放心购买

设置正确的线程数量  

2011-11-29 11:00:35|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
高性能服务器架构 》中提到了SEDA,我搜了一下,发现这篇文章《SEDA性能优化的分析和模拟 》,对于线程数量的建议。假如一个Web请求,代码执行的时间为ST(Service Time),读文件、网络调用之类IO等待时间为为WT(Wait Time),CPU的个数是N、核数是M则线程数量TC(Thread Count)为:

    TC= N*M*(1+WT/ST)

    假如只有1个单核的CPU,如果IO为40毫秒,程序执行要20毫秒,那么可以得出如下的执行序列。

    Request1 执行20毫秒,等待40毫秒,此时CPU空闲。

    Request2 接着执行20毫秒,等待40毫秒,此时Request1还需要等待20毫秒。

    Request3 接着执行20毫秒,等待40毫秒,此时Request2还需要等待20毫秒,Request1执行完毕。

    Request4 就可以重用Request1的线程了。

    按照这个公式,假如1个单核的CPU,存在下面三种应用场景:

    S1:ST=10 WT=0 TC=1

    S2:ST=10 WT=50 TC=6

    S3:ST=10 WT=100 TC=11

    S1是纯粹的计算,没有IO,只消耗CPU;S2是本地文件的访问,有磁盘IO;S3是调用数据库,有网络IO。

    假如S1占总请求数量的10%,S2占20%,S3占70%,此时的TC应该是多少?假如百分比为PER

    TC = N*M*(1 + ( WT1*PER1 + WT2*PER2 ... WTn*PERn)/( ST1*PER1 + ST2*PER2 ... STn*PERn) )

    也就是 说总的等待时间/总的执行时间

    上面的场景,按照公式为

    TC = 1 * 1 * ( 1 + 80/10 ) = 9

    也就是说设置9个线程是合适的。正确的估计每种场景,获得每种场景的数据,对于每种场景的比例做出分析,就大概能计算出线程数量的理论值。当然,也需要根据《压力测试衡量CPU的三个指标:CPU Utilization、Load Average和Context Switch Rate 》的数据来验证和调整。

  评论这张
 
阅读(893)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018