ThreadGroup

许多线程聚集成组即线程组,

线程组可以包括其他线程组,线程组随着层级的增加可形成树,其中的每个线程组除了初始化线程组外都存在着父线程组。

线程允许访问关于它自己的线程组的信息,但不允许访问其线程组的父线程组或任何其他线程组的信息。

当需要锁定策略的时候,线程组成子线程组到父线程组是尽可能地锁定一个级别的树,但是不锁住树的底部。这样可以限制需要持有的锁的数量,特别是避免为根线程组(或全局锁)获取锁,这锁将是多处理器系统中许多线程组争用的资源。这样的锁定策略通常会导致获取一个线程组状态的快照,并在该快照中工作,而不是在执行的时候将线程组锁住。

  1.ThreadGroup初始化

  ThreadGroup有提供构造方法,可以自行进行初始化设置或者自行交给Thread处理,因为在new Thread()时会默认初始化线程组ThreadGroup。关于ThreadGroup的初始化可以参考Thread的源码解析:http://ericchunli.iteye.com/blog/2394118。

  2.ThreadGroup源码解析

  public class ThreadGroup implements Thread.UncaughtExceptionHandler {

  private final ThreadGroup parent; // 父线程组

  String name; // 线程组名称

  int maxPriority; // 线程组优先级

  boolean destroyed; // 是否已经被销毁

  boolean daemon; // 守护线程

  boolean vmAllowSuspension; // 供VM使用

  int nUnstartedThreads = 0; // 线程组中未启动的线程

  int nthreads; // 线程数量

  Thread threads[]; // 线程

  int ngroups; // 线程组数量

  ThreadGroup groups[]; // 线程组

### 使用和配置 JMeter 中的 Stepping Thread Group Stepping Thread Group 是 Apache JMeter 的一种线程组扩展插件,用于模拟逐步增加或减少负载的压力测试场景。它允许用户定义一组参数来控制虚拟用户的数量及其执行方式。以下是关于如何使用和配置 Stepping Thread Group 的详细介绍。 #### 1. 安装 Stepping Thread Group 插件 为了使用 Stepping Thread Group,需要先安装 JMeter Plugins Manager 并通过其下载并安装该插件。具体操作如下: - 打开 JMeter 后,在菜单栏中找到 `Options -> Plugins Manager`。 - 转到 `Available Plugins` 标签页,搜索 `Stepping Thread Group`。 - 勾选此插件并点击右侧的 `Apply Changes and Restart JMeter` 按钮完成安装[^1]。 #### 2. 配置 Stepping Thread Group 参数 在成功安装后,可以在 Test Plan 下方右键单击,选择 `Add -> Threads (Users) -> Stepping Thread Group` 来添加一个新的 Stepping Thread Group。以下是主要参数说明: - **Start Threads Count**: 初始启动的线程数(即初始并发用户数)。 - **End Threads Count**: 测试结束时的最大线程数(最终并发用户数)。 - **Thread Will Start Within**: 设置达到最大线程所需的时间间隔(单位:秒),表示线程逐渐增加的速度。 - **Hold Load For**: 维持峰值负载时间长度(单位:秒)。在此期间,所有线程将以满负荷运行。 - **Ramp-Up Steps Count**: 将总线程分为多少步进行加载,默认每一步会均匀分配一定量的新增线程。 这些设置共同决定了整个压力测试过程中用户行为的变化模式。 #### 3. 示例脚本展示 下面是一个简单的例子演示如何创建一个基于 Stepping Thread Group 的性能测试计划: ```jmeter <threadGroup guiclass="StepThreadGroupGui" testclass="StepThreadGroup"> <stringProp name="ThreadGroup.num_threads">1</stringProp> <!-- 开始线程 --> <stringProp name="ThreadGroup.ramp_time">60</stringProp> <longProp name="ThreadGroup.start_time">1598472000000</longProp> <longProp name="ThreadGroup.end_time">1598475600000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <elementProp name="ThreadGroup.main_controller" elementType="LoopController"/> <!-- 特定于 StepThreadGroup 的属性 --> <stringProp name="stepping_threadgroup_startThreadsCount">1</stringProp> <stringProp name="stepping_threadgroup_endThreadsCount">100</stringProp> <stringProp name="stepping_threadgroup_stepDuration">60</stringProp> <stringProp name="stepping_threadgroup_holdTime">300</stringProp> <stringProp name="stepping_threadgroup_rampUpStepsCount">10</stringProp> </threadGroup> ``` 上述 XML 文件片段展示了如何利用 Stepping Thread Group 构建动态变化的工作负载模型。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值