Nicole2333

导航

并发编程

并发和并行的意义:

并发和并行都可以处理“多任务”,二者的主要区别在于是否是“同时进行”多个的任务。

但是 涉及到任务分解(有先后依赖的任务就不能做到并行)、任务运行(可能要考虑互斥、锁、共享等)、结果合并

4、CPU的时间观

        为什么要进行“并发、并行、多任务、多线程、异步”等等相关的一些操作,就是为了充分利用CPU的巨大潜能,因为很多任务是需要时间的,比如文件的读写、网络数据流的下载等等,如果让CPU处于一个闲置状态,不充分利用它,程序的效率就很低。

       站在CPU的角度而言,我就是全心全意搞计算的,你却让我闲着没事干,在我的心里,等待的时间就异常漫长。下面是CPU所谓的时间观:

 

由此可见,站在人类的角度而言,重启一次也就等了5分钟,还可以接受,可是对于CPU而言,它却感觉等了25000年,这是多么漫长的等待,25000年不做事情,太煎熬了。

进程

进程:正在进行的一个过程或者说一个任务。而负责执行任务的是cpu。

进程与程序的区别

程序仅仅只是一堆代码而已,而进程指的是程序的运行过程。

并发与并行

例子一:

       顺序执行:你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
       并发:你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
       并行:你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并

理解:

解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群

普通解释:

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

专业术语:

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

 同步 异步 阻塞 非阻塞

同步/异步:形容一次方法的调用,在单线程中。描述的是执行者是否具备主动通知功能

  同步,调用者会等到方法调用返回后才能继续后面的行为

  异步,调用者不需要等到方法返回,方法执行完毕后会主动通知调用者


 阻塞/非阻塞:调用者是否可以执行多个任务,在多个线程中。描述的是调用者的多个线程是否可以同时执行

  阻塞,线程1和线程2不能同时进行

  非阻塞,线程1和线程2可以同时进行

举例:

同步阻塞:小明把水壶放到火上,然后在那傻等水开

同步非阻塞:小明把水壶放到火上,然后去客厅看电视,时不时的去厨房看看水开没有

异步阻塞:小明把响水壶放到火上,然后在那傻等水开

异步非阻塞:小明把响水水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去处理

多线程

线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程

车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线

流水线的工作需要电源,电源就相当于cpu

所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。

创建一个进程,就是创建一个车间(申请空间,在该空间内建至少一条流水线)

而建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小

不同的进程之间是充满敌意的,彼此是抢占、竞争cpu的关系,如果迅雷会和QQ抢资源。而同一个进程是由一个程序员的程序创建,所以同一进程内的线程是合作关系,一个线程可以访问另外一个线程的内存地址,大家都是共享的

 类似于进程,每个线程也有自己的堆栈

关于线程小故事

posted on 2019-11-21 10:55  Nicole2333  阅读(79)  评论(0)    收藏  举报