2.7线程Threads

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。在多线程OS中,通常是在一个进程中包括多个线程。

1.线程的引入:

引入线程的目的:减少程序在并发执行时所付出的时空开销,在追求效率的前提下实现并发。
注: 利用进程实现的多道程序系统中,频繁的进程切换会浪费大量时空开销。限制并发程度问题所在:进程实体信息量大,对进程的管理操作越多,与运行时间的比值就越大,运行效率就低。
当A进程内的a1功能执行不下去时,可以切换到an上继续执行,避免切换到B,节约切换开销
当A进程内的a1功能执行不下去时,可以切换到an上继续执行,避免切换到B,节约切换开销。

2.线程的属性:

2.1轻型实体:只需一点必不可少的、能保证独立运行的资源(TCB)。
2.2独立调度和分派的基本单位:调度切换迅速且开销小。
2.3可并发执行
2.4共享进程资源:同进程中的线程可共享相同的进程地址空间、已打开文件、信号量机构等。

3.线程的信息(TCB管理什么信息?):

系统为每个线程配置了一个线程控制块(TCB),包括:
(1)状态参数:标识符、运行状态、优先级、寄存器状态、堆栈、专有存储器、信号屏蔽等。
(2)运行状态:执行、就绪、阻塞

4.线程的创建和终止:

在多线程OS中,应用程序启动时,通常只有一个线程(初始化线程)在执行,它根据需要再创建若干线程。
4.1创建新线程:利用线程创建函数(或系统调用),提供相应参数。线程创建函数执行完后,返回一个线程标识符供以后使用。
4.2线程被终止:不立即释放资源,只有当进程中的其它线程执行分离函数后,资源才分离出来能被其它线程利用。被终止而未释放资源的线程仍可被需要它的线程调用,使其重新恢复运行。

5.多线程的应用:

一个应用程序有多个任务或功能需要同时进行处理,就最适合多线程机制。
应用情况举例:

  • 网络软件,需要同时进行用户界面响应、收数据、发数据。
  • 网络下载工具:多线程下载的下载工具

6.多线程OS中的进程属性:

6.1进程只是用于分配系统资源
6.2包括多个线程
6.3进程不再是执行实体,线程在进程范围内作为执行实体。

7.线程与进程的区别:

7.1调度单位:

  • 传统OS中进程作为独立调度和分派的基本单位,进程是能独立运行的基本单位。
  • 在引入线程的OS中,把线程作为调度和分派的基本单位,因而线程是独立运行的基本单位。

7.2并发行:

  • 在引入线程的OS中,不仅线程间可以并发执行,一个线程中的多个线程也可并发执行,甚至允许一个进程中的所有线程并发执行。

7.3拥有资源:

  • 进程可以拥有资源,并作为系统中拥有独立资源的一个基本单位。
  • 线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。属于同一进程的所有线程都拥有相同的地址空间(线程可以访问该地址空间中的每一个虚地址)。

7.4系统开销:

  • 创建或撤销进程是系统都要为之分配和祸首PCB、分配或回收其他资源。
  • 线程的创建、撤销及切换所付出的系统开销远低于进程。

7.5支持多处理机系统:

  • 传统的进程(单线程进程),不论有多少处理机,该进程只能运行在一个处理机上。
  • 多线程进程可以把一个进程中的多个线程分配到多个处理机上。
在 JMeter 中,线程组(Thread Group)是测试计划的核心组件之一,用于模拟虚拟用户的行为。通过配置线程组的参数,可以模拟不同数量的并发用户,测试不同的负载模式,以及实现多样化的性能测试场景。 ### 线程组配置参数详解 #### 基本参数 - **线程数(Number of Threads)**:设置并发用户数,可以使用变量(如 `${users}`)进行动态配置。 - **Ramp-Up 时间**:设置启动所有线程所需的时间,单位为秒。例如,如果线程数为 100,Ramp-Up 时间为 50 秒,则每 0.5 秒启动一个线程。 - **循环次数(Loop Count)**:每个线程执行取样器的次数。若勾选“永远(Forever)”,则线程将无限循环执行,直到手动停止或达到调度器设置的持续时间。 #### 高级选项 - **Same user on each iteration**:勾选后,每次迭代使用相同的线程执行,确保会话状态保持一致。 - **延迟创建线程直到需要(Delay Thread Creation until Needed)**:勾选后,线程只会在需要时创建,有助于资源管理。 - **调度器(Scheduler)**:用于控制线程组的运行时长。 - **持续时间(Duration)**:线程组运行的总时间,单位为秒。 - **启动延迟(Startup Delay)**:线程组启动前的延迟时间,单位为秒。 #### 错误处理策略 - **启动下一进程循环(Start Next Thread Loop)**:当取样器发生错误时,忽略错误并开始下一次循环。 - **停止线程(Stop Thread)**:当前线程运行完毕后停止。 - **停止测试(Stop Test)**:停止整个测试计划,如果有多个线程组,所有线程组都会停止。 - **立即停止测试(Stop Test Now)**:整个测试计划立即停止运行。 ### 线程启动持续时间计算 为了确保所有线程同时运行,最后一个线程启动时,第一个线程仍未结束。这可以通过以下公式计算: $$ A > \frac{T - \frac{T}{N}}{t} $$ 其中: - $ A $ 表示单个线程的执行次数。 - $ T $ 表示总运行时间。 - $ N $ 表示线程总数。 - $ t $ 表示单次请求的平均响应时间。 例如,若 $ T = 2.7 $ 秒,$ t = 0.386 $ 秒,则: $$ A > \frac{2.7 - \frac{2.7}{N}}{0.386} $$ ### 示例配置 以下是一个典型的线程组配置示例: ```yaml 线程数: 100 Ramp-Up 时间: 50 循环次数: 10 调度器: 启用 持续时间: 3600 秒 启动延迟: 0 秒 ``` 该配置表示 100 个线程将在 50 秒内逐步启动,每个线程执行 10 次循环,测试将持续 1 小时。 ### 总结 JMeter 线程组的配置可以通过灵活调整参数来满足不同的测试需求。理解每个参数的含义影响,有助于更好地模拟真实用户行为,从而获得准确的性能测试结果[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值