并发,并行,进程,线程,同步,异步

关于这几个概念一直理解的不是特别清楚,而且我在学校做的是基于tilera多核处理器的hevc多路视频并行编码,对线程和并行有些许了解,但是我觉得还是要复习下。。(理解的不好。)

预热:

一个应用程序中至少有一个进程(os资源分配的最小单位),一个进程中至少一个线程(cpu调度的最小单位)

  • 并发
    1.在操作系统中,是指一个时间段中有几个程序都处于已经启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一时间点上都只有一个程序在处理机上运行
    2.当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正的同时运行一个以上的线程,它只能把CPU的运行时间划分成若干个时间段,再把时间段分给各个线程去执行(单个CPU为啥还搞多线程?虽说多线程出来是为了多核时代,但是他可以防止程序阻塞,也可以方便编程建模),在一个时间段中的某个线程运行,其他的线程都处于挂起状态,这种方式我们称为并发(就是一个坑(cpu),大家一起去拉屎 你拉一下 我拉一下 防止某一个人拉不出来 占着坑(阻塞))
  • 并行:当系统有一个以上的CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程的时候,另一个CPU执行另一个线程,两个线程互不抢占资源,可以同时进行,这种方式我们称为并行(废话多个cpu就是多个坑,每一个去拉屎的人就是线程,资源多当然不怕阻塞,随便并行咯)

第一弹

进程同步用来实现程序并发执行时候的可再现性

  1. 进程同步: 就是在发出一个功能调用时,在没有得到结果之前,该调用不能返回。也就是必须一件一件的做事情,等前一件做完才能做下一件事情,就像早晨起床后,刷牙,吃饭,不能没刷牙就吃饭。按照这个定义,其实绝大多数函数都是同步调用(不返回值就会停在这里)。(一般而言,我们说同步异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务)sendmessage该函数发送一个消息给某一个窗口,在对方处理消息之前,这个函数不返回。当对方处理完毕后,该函数才能把消息处理函数所返回的result返回给调用者
    2.异步:异步的概念与同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过(状态、通知和回调来返回给调用者)jdbc(调用者线程)请求数据库连接的时候,调用者线程可以继续运行下一步的statement 执行sql(没真正执行),当连接真正的建立起来,数据库驱动管理会获取到来自数据库的通知?(我这是在讲一个概念,并不一定就是这样)。
    这里降到执行部件和调用者通过三种途径返回结果(状态、通知、回调)。具体使用哪一种依赖于执行部件的实现,除非执行部件提供多种选择,否则不收调用者控制。
    a.如果执行部件用状态来通知,那么调用者就需要轮询(每隔一定时间检查一次)
    b.使用通知的方式,效率比较高,因为执行部件几乎不需要做额外的操作
    c.回调函数,本质上和通知没有很大的区别
    进程同步的基本概念
    在计算机系统中,由于资源有限而导致进程之间的资源竞争和共享,因此,进程的并发执行不仅仅是用户程序的执行开始时间的随机性和提高资源利用率的结果,也是资源有限性导致资源的竞争和共享对进程的执行过程进行制约所造成的。那么在进程的并发执行过程中存在哪些阅知呢?

第二弹

你可能感兴趣的:(并发,并行,进程,线程,同步,异步)