zoukankan      html  css  js  c++  java
  • 最佳线程数

    影响最佳线程数的主要因素:

    1、IO

    2、CPU

    根据公式:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

    一般来说是IO和CPU。IO开销较多的应用其CPU线程等待时间会比较长,所以线程数量可以开的多一些,相反则线程数量要少一些,其实有两种极端,纯IO的应用,比如proxy,则线程数量可以开到非常大(实在太大了则需要考虑线程切换的开销),这种应用基本上后端(比如这个proxy是代理搜索的)的QPS能有多少,proxy就有多少。

    另一种是耗CPU的计算,这种情况一般来讲只能开到CPU个数的线程数量。但是并不是说这种应用的QPS就不高,往往这种应用的QPS可以很高。

    上面的有点难计算,简便公式是CPU数量 *2 + 2

    但是你要知道一台电脑上不可能只跑你一个程序,所以别太认真了

    转载请注明:码农场 » 多核CPU开几个线程最好

    转自 http://iamzhongyong.iteye.com/blog/1924745

    最近在关注性能的事情,所以对于多线程程序中,如何设置最佳的线程数,找了一些文章。虽然有公式可以套用,

    但是,其实最佳的话只是相对的,了解了过程之后,处理线程数的设置就会游刃有余了。

    名字解释:

    1、QPS:系统每秒处理的请求数(query per second)

    2、RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值

    3、最佳线程数量:刚好消耗完服务器瓶颈资源的临界线程数

    QPS和RT的关系:

    对于单线程:QPS=1000/RT

    对于多线程:QPS=1000*线程数量/RT

    性能的两个点:

    吞吐量和延迟,其实通俗的解释就是QPS和RT(我的理解),虽然有上面的公式,但是两者的关系并不是完全线性的。

    至于为啥?原因很多,系统表现远远比我们想想的要复杂。

    最佳线程数有公式吗?

    答案是肯定的。

    服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量  (CPU瓶颈类型)

    在达到最佳线程数的时候,线程数增加,则QPS不变,而响应时间变长,线程数量继续增加,则QPS下降(上下文切换耗时)。

    最佳线程数是动态的,在不同的状态下会进行变化。

    瓶颈资源可以是CPU、内存、数据库连接池、锁资源、IO等。

    超过最佳线程数,会导致资源竞争加剧,同时响应时间也会增加。

    如何获取最佳线程数呢?

    有了公式,其实并没有实质性的解决问题。

    1、逐步压测,不断的调整线程数来观察系统的负载,这个最土,但是最实用

    2、如果确切的知道瓶颈资源的使用情况,则可以直接使用公式;

    3、单用户压测,查看CPU的使用情况,然后基于公式得出一个值,上下微调;

    http://www.ibm.com/developerworks/library/j-jtp0730/index.html

    http://www.thejoyofcode.com/tuning_the_threadpool.aspx

    http://www.infoq.com/articles/Java-Thread-Pool-Performance-Tuning 

  • 相关阅读:
    30天敏捷结果(26): 如何解决问题
    30天敏捷结果(30):提升敏捷结果
    30天敏捷结果(27):做些有重要意义的事
    STM32笔记A
    嵌入式linux驱动开发入门总结
    2014年个人计划
    迄今为止见过最好的职业规划
    30天敏捷结果(28):撰写你的个人使命
    C语言深度解剖读书笔记
    基于 SQLite 数据库的 C# 实体模型的实现
  • 原文地址:https://www.cnblogs.com/xiaoerhei/p/3861377.html
Copyright © 2011-2022 走看看