`
wwty
  • 浏览: 543018 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

并发和并行的概念区分

阅读更多

就当前计算机的技术来讲,目前大部分的语言能够满足并发执行,但是现在的多核cpu或者多cpu下开始产生并行的概念。

 

总体概念:

在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。 

 

并发编程:

 "并发"在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行。
  使用多个线程可以帮助我们在单个处理系统中实现更高的吞吐量,如果一个程序是单线程的,这个处理器在等待一个同步I/O操作完成的时候,他仍然是空闲的。在多线程系统中,当一个线程等待I/O的同时,其他的线程也可以执行。
  这个有点像一个厨师做麻辣鸡丝的时候同时做香辣土豆条,总比先做麻辣鸡丝再做香辣土豆条效率要高,因为这样可以交替着做。
  上面这总情况是在单处理器(厨师)的系统处理任务(做菜)的情况,厨师只有一个,他在一个微观的时间点上,他只能做一件事情,这种情况就是虽然是多个线程,但是都是在同一个处理器上运行。
  但是多线程并不能一定能提高程序的执行效率,比如,你的项目经理给你分配了10个bug让你修改,你应该会一个一个去改,一般的人不会每个bug去改5分钟,知道改完为止,如果这样的话,上次改到什么地方都记不得了。在这总情况下并发并没有提高程序的执行效率,反而因为过多的上下文切换引入了一些额外的开销。

因此在单cpu下只能实现程序的并发,但是无法实现程序的并行。

 

现在cpu到了多核的时代,那么就出现了新的概念:并行。

并行是真正的细粒度上的同时进行;既同一时间点上同时发生着多个并发;更加确切并且简单的来讲:就是每个cpu上运行一个程序,以达到同一时间点上每个cpu上运行一个程序。

 

总结,计算机的计算原理是顺序执行的;既一台计算机同一时间点上只能完成一个运算;既然突破不了这个理论基础,那么就在其基础上去发展去:为一台计算机内置多个cpu,这样就可以达到真正意义上的并行。

 

就目前来讲,硬件上已经到来了多cpu的时代,软件技术上已经开始跟进并行,比如java已经开始在新的虚拟机上加入并行。但是就当前来讲,并发编程还是主流的。那么什么情况下去使用并发编程呢?

 

比如,你有一个计算,包括cpu的计算,网络的传输,数据库的访问,io的操作,如果不采用并发,而是单线程执行,那么cpu计算结束,程序还需要等待接下来步骤的彻底完成,才算一次执行完毕。如果在执行的过程中,又有新的访问到来,那么就需要等待上一次的执行彻底完成,才能开始本次的访问。这样从很大程度上浪费了cpu的资源;如果采用并发编程,既线性编程,那么上面的过程就得这样描述了:一次请求完成cpu计算之后,开始等待剩余步骤的执行;而下一次的请求也可以先完成cpu的计算,进入剩余步骤状态;这样从很大程度上提高了程序的执行效率,也提高了cpu的利用率,充分的利用了cpu的计算资源。

 

因此,如果你的程序是只进行cpu的计算就over,那么采用线性编程就得不偿失,因为cpu一次只能完成一次计算,如果将一次正在进行的计算挂起,开始一个新的计算,新的计算进行一半,又被挂起,回头执行上次的计算;大家从现实当中就可以考虑一下:一个学生在同一时间,是只能做一门功课的,当前正在做语文作业,做了一些之后放下,开始做数学,那么这时还得打开数据作业本,整理思路,找到老师布置的科目等,然后开始做;然后做了一半,又放下开始做剩余的语文作业。。。。。。不用再描述下去了吧?所以,只进行cpu计算的程序,是不需要多线程的。而如果程序包括多个执行步骤,而其中的某一个步骤比较耗时,程序想将一次计算完毕,需要等待耗时的操作返回,这个时候就得考虑线性编程了。

分享到:
评论

相关推荐

    python并发编程(并发与并行,同步和异步,阻塞与非阻塞)

    但在这当中,发现一些概念区分起来很难,比如并发和并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间...

    Windows并发编程指南pdf

    ### Windows并发编程指南...从基本概念到高级技术,从线程管理到数据同步,再到具体的编程技术和系统级并发问题,内容丰富详实。无论是初学者还是资深开发者都能从中受益,是学习Windows并发编程不可或缺的参考资料。

    java并发编程实践

    ##### 1.1 并发与并行概念区分 在Java并发编程实践中,首先需要理解“并发”与“并行”的区别。“并发”指的是多个任务同时进行,但实际上可能是在多线程环境下通过交替执行的方式实现的;而“并行”则是指多个任务...

    并行算法课件

    - **并发与并行的区别**:并行处理涉及多个任务在同一时刻执行,而并发则是在一段时间内交替执行,课程可能区分这两种概念。 通过深入学习这门课程,我们可以掌握并行计算的基本理论,提高解决复杂问题的能力,为...

    bx.zip_并行

    手环ID的去区分和并行处理意味着系统需要同时处理多个手环的数据,并且保持它们之间的交互独立,各自完成特定的功能。这可能涉及并发控制、数据同步以及分布式计算等技术。 并行处理主要包括以下知识点: 1. **...

    带你区分几种并行(详细).doc

    并行计算是现代计算机科学中的一个重要概念,它旨在通过同时执行多个任务或处理大量数据来提高计算效率。本文将深入探讨几种主要的并行类型,包括共享内存、分布式内存和分布式共享内存三种存储方式,以及单指令多...

    最新外文文献(原文加翻译)

    在计算机科学领域,"并行"和"并发"是两个经常被提及的概念,它们对于提高系统效率、缩短任务处理时间和充分利用多核处理器的潜力具有重要意义。 首先,我们要区分并行与并发。并行处理是指在同一时刻执行多个独立的...

    北航计算机学院进程与并发程序设计原理

    《北航计算机学院进程与并发程序设计原理》是一门深入探讨操作系统核心概念的课程,重点关注进程并发的相关理论和实践。课程内容涵盖了从基础概念到实际应用的多个方面,旨在帮助学生理解和掌握操作系统中处理并发...

    Java 7并发编程实战手册

    1. **并发与并行**:首先区分并发(Concurrent)与并行(Parallel)的概念。并发指的是多个任务可以同时进行,但实际上它们可能是在单个处理器上交替执行的;而并行则指的是多个任务在同一时刻在不同的处理器或核心...

    书---Java并发编程的艺术

    在讨论Java并发编程之前,首先需要区分并发与并行的概念。并发是指在同一时间段内同时处理多个任务的能力,而并行则是指在同一时间点同时执行多个任务。在Java中,我们通常所说的多线程编程指的是并发而非并行。 ##...

    高性能计算并行编程技术—MPI并行程序设计

    在学习MPI并行程序设计时,重要的是理解以下几个关键概念: 1. **进程和进程组**:MPI程序由多个进程组成,这些进程可以分布在多台机器上,形成一个进程组。每个进程都有一个唯一的标识符(rank),用于区分不同的...

    类型系统与并行计算.pptx

    在并行计算中,数据并行和控制并行是两个相互补充的概念,它们共同决定了并行程序的整体性能。类型系统在这两个方面都扮演着重要角色,通过类型检查和类型推导等机制来提高程序的正确性和效率。 - **数据并行**:...

    Java高并发程序设计

    - **读写锁**:通过区分读操作和写操作来提高并发性能。 - **屏障模式**:利用`CyclicBarrier`和`Phaser`等工具实现多个线程之间的同步等待。 #### 五、并发性能优化 《Java高并发程序设计》还特别强调了并发性能...

    CUDA高性能计算并行编程.zip

    5. **CUDA C++与设备指针**:CUDA扩展了C++,引入了设备指针的概念,用于区分CPU和GPU上的数据,以及进行数据传输。 6. **CUDA运行时API**:CUDA运行时API提供了一系列函数,用于初始化设备、分配内存、复制数据...

    java并发技术

    #### 1.1 并发与并行的概念区分 - **并发**:指的是多个任务看起来同时执行的现象,实际上可能是通过时间片轮换来实现的。 - **并行**:指的是多个任务真正地在同一时刻执行,通常依赖于多核处理器的支持。 #### ...

    Cpp Concurrency In Action 中英文版

    1. 并发与并行:书中首先区分了并发和并行的概念,前者是指多个任务在时间上交替执行,后者是指多个任务在同一时间执行。理解这一点是掌握并发编程的基础。 2. C++线程库():C++11引入了标准线程库,书中详细介绍...

    CUDA培训_cuda_cudaGPU_cuda并行计算_

    下面将详细阐述CUDA的核心概念、并行计算流程以及相关知识点。 1. **CUDA架构**:CUDA架构包括GPU、CUDA核芯、流式多处理器(SM)、线程块和网格。GPU内有多个SM,每个SM负责管理多个并发执行的线程块,线程块内部...

    Parallel Programming with Python

    4. **并发与并行的区别**:明确区分并发与并行的概念,并讨论它们在实际应用中的联系与区别。 5. **并行算法设计**:讲解并行算法的设计原则,包括任务分解、负载均衡等方面。 6. **Python并行编程案例分析**:通过...

    多核多线程-并发编程简述.pdf

    这些标识符用于区分和管理运行在操作系统中的线程。 文档中提到的PV/UNIX/Linux,指的是不同的操作系统平台。其中,PV可能指的是进程虚拟化(Process Virtualization),而UNIX和Linux是类Unix操作系统家族的两个...

Global site tag (gtag.js) - Google Analytics