精华内容
下载资源
问答
  • 并行与并发

    2012-11-27 15:39:57
    一:并行与并发: 1.“并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。 2.而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程...

    前段时间完成的软件中,出现了不但没有发挥双核的优势,反而出现了在单核没有的问题。不知道为什么这样,接下来准备把真正的多核开发,发挥多核的优势,作为目标,解决这个多核编程的问题!!!

    一:并行与并发:
    1.“
    并行是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。
    2.
    并发在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
    3.
    从以上本质不难看出,并发执行,在多个进程存在资源冲突时,并没有从根本提高执行效率。

    1.posix
    中,并发的定义要求:延迟调用线程的函数不应该导致其它线程的无限期延迟;
    2.
    并发操作之间科能相互交替,导致程序相互独立的运行(一个程序不必等到另一个程序结束后运行),但是并发并不意味着操作同时执行。
    3.
    并行的补充含义是指事情在相同的方向上同时进行(没有交错)。真正的并行只能在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在。
    并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作轮流执行)。


    1.
    在多处理器系统中,线程模式可以让一个进程同时执行多个独立的运算。一个运行在双CPU上的计算密集型多线程程序几乎可以获得传统的
    单线程程序两倍的性能。几乎两倍是基于以下的事实:创建额外的线程和执行线程间的同步会带来额外的开销。这种效果通常称为可扩展性
    2.“
    可扩展性总是随着CPU数量的增加而下降,因为可能会有更多的锁操作和内存冲突。
    3.
    多处理器系统中的硬件必须提供同步访问内存的机制。当每个处理器有自己的数据高速缓存时,其中的数据必须与其它处理器缓存的数据以及内存中的数据保持一致。

    1.
    线程编程模式允许程序在等待如I/O之类的阻塞操作的时候继续其它计算。这对网络服务器和客户端是有用的,也是C/S系统使用线程的主要原因。
    当一个线程在等待费时的网络I/O操作的时候,该线程被阻塞,而其它线程还可以独立的运行。某些系统支持异步I/O操作,可以具有类似的好处,但
    大部分UNIX类系统不提供异步I/O操作,而且异步操作通常比线程更复杂。
    注:UNIX系统支持非阻塞式I/O“:允许程序推迟I/O操作,知道它能够不被中断的完成该操作。而异步I/O:能在程序执行其它操作的同时继续I/O

    二:多线程编程模型的优点:
    1.
    在多处理器系统中提高开发程序的并行性。除并行性这一优点需要特殊硬件支持外(多CPU),其它优点对硬件不作要求。
    2.
    在等待慢速外设I/O操作结束的同时,程序可以执行其它计算,为程序的并发提供更有效,更自然的开发方式。
    3.
    一种模块化编程模型,能够清晰的表达程序中独立事件间的相互关系。

    展开全文
  • 并行与并发的区别

    2019-05-22 15:58:25
    并行与并发的区别 并行 同一时间点做某两件事 并发 同一时间段做某件事

    并行与并发的区别

    并行
    同一时间点做某两件事
    在这里插入图片描述
    并发
    同一时间段做某件事
    在这里插入图片描述

    展开全文
  • 最近研究Java线程,多线程的...于是就有了整理一下并行与并发的区别的必要。 并行,同时进行几个任务;并发,根据虚拟机分配的时间片分时间运行不同的任务,同一时间只有一个任务在进行。用图介绍如下: 并行 并发

    最近研究Java线程,多线程的并发,又研究了Fork/Join框架知道了这是并行计算。于是就有了整理一下并行与并发的区别的必要。
    并行,同时进行几个任务;

    并发,根据虚拟机分配的时间片分时间运行不同的任务,同一时间只有一个任务在进行。

    用图介绍如下:
    并行
    这里写图片描述
    并发
    这里写图片描述

    展开全文
  • Python中的并发编程(2): 并行与并发

    千次阅读 2018-03-19 15:15:10
    并行与并发 很多人都会有一个问题,并发(Concurrency)和并行(Parallelism)是一个概念吗?它们之间有什么区别呢?只有在充分了解概念的情况下,才能在接下来的学习中,不被文献中充斥的各种概念弄混淆;在实践中,也...

    并行与并发

    很多人都会有一个问题,并发(Concurrency)和并行(Parallelism)是一个概念吗?它们之间有什么区别呢?只有在充分了解概念的情况下,才能在接下来的学习中,不被文献中充斥的各种概念弄混淆;在实践中,也能更好的选择实现手段。

    一般说来,并发,指的是多个任务能够同时存在,是否同时执行并不重要,而并行,主要侧重于多个任务之间能够同时进行。所以,我们也可以理解为并行是并发的一个子集。

    img

    如上图所示,大家分为两队去接饮料,这就是并发。大家分两队,同时分别去两个饮料机接饮料,这就是并行。

    并发系统的一些特性

    • 包含多个操作
    • 拥有共享的资源:内存,硬盘或者其他资源
    • 遵从一些规则:只有所有的操作都严格的遵循一定的规则,整个系统才能按照期待的方向发展

    性能瓶颈

    并发编程一般都是用于解决一些性能问题,主要的性能问题有两种,I/O性能瓶颈,CPU性能瓶颈。

    I/O瓶颈

    这种情况下,程序主要阻塞在输入输出等部分。例如网络爬虫。

    CPU瓶颈

    这种情况下,程序主要阻塞在计算部分。主要由时钟频率和CPU的核心个数影响。

    使用单核优点:

    • 不需要很复杂的通信协定
    • 消耗电能更小,适合于物联网。

    使用单核缺点:

    • 处理速度有限

    反过来就是多核的优缺点了。就不一一说明。

    任务调度

    在这儿只是说明任务调度的复杂性和重要性,至于如何安排任务,在以后会进行详细说明。 并发程序的多个线程之间的运作方式有很大的不确定性,如果不加以控制的话,程序运行的结果也会有很强的不确定性。这里以一个经典的生产者,消费者模型/使用场景为例进行说明。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    
    import threading
    import time
    import random
    
    counter = 1
    
    
    def workerA():
        global counter
        while counter < 1000:
            counter += 1
            print("Worker A is incrementing counter to {}".format(counter))
            sleepTime = random.randint(0,1)
            time.sleep(sleepTime)
    
    
    def workerB():
        global counter
        while counter > -1000:
            counter -= 1
            print("Worker B is decrementing counter to {}".format(counter))
            sleepTime = random.randint(0,1)
            time.sleep(sleepTime)
    
    
    def main():
        t0 = time.time()
        thread1 = threading.Thread(target=workerA)
        thread2 = threading.Thread(target=workerB)
    
        thread1.start()
        thread2.start()
    
        thread1.join()
        thread2.join()
    
        t1 = time.time()
    
        print("Execution Time {}".format(t1-t0))
    
    if __name__ == '__main__':
        main()
    

    系统架构

    在正式编程之前,还是要介绍下目前的系统架构,主要分为 SISD, SIMD, MISD, MIMD四种。直接从wiki上搬运些资料吧。原地址:费林分类法

    SISD

    单指令流单数据流(英文:Single instruction, single data,缩写:SISD),每个指令部件每次仅译码一条指令,而且在执行时仅为操作部件提供一份数据。符合冯·诺伊曼结构。

    单指令流单数据流是费林分类法中4种计算机处理架构类别的一种。在这个分类系统中,分类根据是指令流和资料流的数量,以此根据来划分计算机处理架构的类别。根据米高·J·费林的观点,当指令、资料处理流水化/管线化时,单指令流单数据流也可以拥有并行计算的特点。管线化的指令读取执行在当代的单指令流单数据流处理机种上很常见。

    img

    注明: PU 指的是程序单元(processing unit)

    SIMD

    单指令流多数据流(英语:Single Instruction Multiple Data,缩写:SIMD)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。

    在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX或SSE,以及AMD的3D Now!指令集。

    图形处理器(GPU)拥有强大的并发处理能力和可编程流水线,面对单指令流多数据流时,运算能力远超传统CPU。OpenCL和CUDA分别是目前最广泛使用的开源和专利通用图形处理器(GPGPU)运算语言。

    img

    MISD

    多指令流单数据流(Multiple Instruction stream Single Datastream, MISD)是并行计算机的一种结构。MISD具有n个处理单元,按n条不同指令的要求对同一数据流及其中间结果进行不同的处理。一个处理单元的输出又作为另一个处理单元的输入。

    严格意义上,采用这种结构的计算机至今没有出现,但是已经有了近似的例子。在流水线结构中,一条指令的执行过程被分为多个步骤,并且交给不同的硬件处理单元,以加快指令的执行速度。

    img

    MIMD

    多指令流多数据流(Multiple Instruction Stream Multiple Data Stream,缩写:MIMD),是使用多个控制器来异步地控制多个处理器,从而实现空间上的并行性的技术。

    img

    计算机的内存模式

    在正式开始程序设计之前,计算机的内存模式也是需要做了解的概念。

    均匀访存模型(UMA)

    均匀访存模型(Uniform Memory Access)通常简称UMA,指所有的物理存储器被均匀共享,即处理器访问它们的时间是一样的。UMA亦称作统一寻址技术或统一内存存取。

    这种系统因为高度的资源共享也被称为紧耦合系统(Tightly Coupled System)。

    img

    这种模式的好处是,缓存都是一致的,硬件也容易设计,但是不利于扩展。

    非统一内存访问架构(NUMA)

    非统一内存访问架构(英语:Non-uniform memory access,简称NUMA)是一种为多处理器的电脑设计的内存,内存访问时间取决于内存相对于处理器的位置。在NUMA下,处理器访问它自己的本地内存的速度比非本地内存(内存位于另一个处理器,或者是处理器之间共享的内存)快一些。

    非统一内存访问架构的特点是:被共享的内存物理上是分布式的,所有这些内存的集合就是全局地址空间。所以处理器访问这些内存的时间是不一样的,显然访问本地内存的速度要比访问全局共享内存或远程访问外地内存要快些。另外,NUMA中内存可能是分层的:本地内存,群内共享内存,全局共享内存。

    img

    这种模式利于扩展,但是处理器对于不同位置的内存的访问速度不一致,并且多个处理器之间需要识别并维护内存内容的一致性。

    总结

    本节也只是对一般的概念做介绍,即使不需要使用python,但是对并发感兴趣的同学也可以了解下相关的概念。

    展开全文
  • Java中并行与并发的概念区别并行新的改变功能快捷键 并行 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 ...
  • 进程线程、并行与并发的理解

    千次阅读 2019-04-13 09:40:59
    进程线程、并行与并发的理解 进程线程 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,...
  • 并行与并发的理解

    2012-11-05 10:49:50
    # 并行与并发的理解 **背景**:根据Golang-china里面一帖子的讨论,到网上查资料做的笔记。 >"并行是关于性能的;并发是关于程序设计的。--ROB PIKE" ## 博客参考 - [并发并行的区别:吃馒头的比喻]...
  • 并发并行 概念非常相似,难以区分。分别体现在两个方面。 并发(Concurrency),体现在(1)单个处理器;(2)逻辑上同步运行。 并行(Parallelism),体现在(1)多处理器,多核心;(2)物理上同步运行。 并行的...
  • Java并发并行与并发的区别

    千次阅读 2017-07-14 22:07:34
    关于并行并发的比较容易混淆:   并行表示多个任务一起执行;  并发表示多个任务交替执行;  在服务器只有一个cpu的情况下,多个线程同时执行时,其实即为并发执行,多个线程要交替执行,  而在服务器有多个cpu或...
  • 并行与并发的关系

    2019-07-08 15:09:29
    什么是并行:        并行其实就是指在具有多个处理单元的系统上,将数据划分为多个部分(或者将计算划分为多个部分)并分配到不同的处理单元上,各处理单元相互协调,共同运行...
  • 并行】 计算机操作系统上的并行,指的是同时存在于内存中的多道作业都处于运行状态。 (实际上都是宏观上并行,微观上串行,因为这些作业都是开始各自的运行,但都没运行完毕,只是交替地使用CPU) 在操作系统中是...
  • 并行并发在计算机编程中是非常重要的两个概念,但是它们常常被混淆。下面我来用一句话来概括,然后用通俗易懂的语言解释并举例说明。 并发:两个任务共享时间片段。在计算的场景中是指,只有一个CPU的情况下,有...
  • 并行与并发的含义

    2013-08-22 16:46:04
      并发:一个处理器同时处理多个任务, 并行:多个处理器或者是多核的处理器同时处理多个不同的任务。...并行(parallelism)是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行...
  • 并行与并发 并行是指在同一时间同时执行多个任务,多个任务是一块执行的 并发是指在一段时间内执行多个,但是任务不是同时执行的,而是轮流执行的 同步异步 同步是指,两个任务具有关联性,后者可能需要前者的结果...
  • 但在这当中,发现一些概念区分起来很难,比如并发并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。 1. 并发 & 并行  并发:在操作系统中,是指一个时间段中有...
  • 关于多核单核、并行与并发

    千次阅读 2017-10-14 15:44:10
    单核cpu的话只能是并发,多核cpu才能做到并行执行。可能有这样的疑问:那多进程的并发有什么意义,不但没有提高cpu的利用效率,由于调度等开销,还降低了cpu的使用。这样的想法是片面的:1.进程并不是时时刻刻都占用...
  • Java8函数式编程3-并行与并发

    千次阅读 2016-12-18 14:05:57
    Java8对程序并行并发新增支持的简单介绍
  • 并行:在同一时刻,同时有多个进程或线程运行。 举个简单明了的例子:  如果一台主机只有一个CPU,那么在某一时刻内最多只能有一个线程在CPU中运行。这个时候,如果有多个线程需要运行,则将一个时间间隔分成...
  • 以下转自知乎,传送门图一为并发,图二为并行
  • 并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。 而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观...
  • 第一部分我们介绍并行并发程序的原理;第二部分介绍的是并行程序的设计;第三部分介绍并发程序的设计。 Java的多线程编程 Java中实现多线程的方法: 1.继承Thread类 class MyThread extends Thread { ...
  • 并发(concurrent)表示将同一个操作分解为多个部分并且允许无序执行。 没看懂?看下面的例子 场景:小明画画,他需要画一个圆、画一个矩形。 小明先画圆,再画矩形,这就是顺序执行。 由于小明是一个人,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 235,802
精华内容 94,320
关键字:

并行与并发