为什么jmeter做压测叫做“并发”而不叫“并行”?

    xiaoxiao2022-07-05  171

    昨天开测试方案评审会议,其中有一条性能测试需求为:测试100个用户同时进行查询,响应时间小于2s。方案中给出了100个用户并发操作的说明,关于“并发”二字,百思不得其解。 首先,挖出脑袋里大学操作系统课堂上提到的概念:

    并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

    并行, 在操作系统中是指,一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。

    本人粗暴将二者区分为:

    并发是指同一时刻只有一个程序在运行,并行是指同一时刻可以运行多个程序。

    按照这种理解,那jmeter测试100个用户同时进行操作的话,不是应该叫做“并行”吗?

    经过查阅资料,下面引用几段内容:

    理解:

    (1)并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。

    (2)并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

    (3)在一台处理器上“同时”(这个同时实际上市交替“”)处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

    普通解释:

    并发:交替做不同事情的能力

    并行:同时做不同事情的能力

    专业术语:

    并发:不同的代码块交替执行

    并行:不同的代码块同时执行

    总结:

    如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。

    如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。

    并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。

    在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。

    如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。

    我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。

    并发就是指代码逻辑上可以并行,有并行的潜力,但是不一定当前是真的以物理并行的方式运行。并发指的是代码的性质,并行指的是物理运行状态。

    顾名思义,并发强调的是一起出发,并行强调的是一起执行。并发的反义是顺序,并行的反义是串行。并发并行并不是互斥概念,只不过并发强调任务的抽象调度,并行强调任务的实际执行。

    查过资料后,本人又心生感触:

    以jmeter为例,当ramp-up时间大于0,叫并发;ramp-up时间等于0,也称为并发(实则为并行,称呼方便)

    越查越懵,操作系统基础不够牢固,暂时告辞。 未完待续

    最新回复(0)