串行,并行,并发,阻塞,非阻塞易混淆概念

1 串行,并行,并发
串行:一个时间段内,执行一个任务的同时不能执行其他任务,只能等到第一个任务完成后才能进行第二个。单核单线程,指的是任务数与cpu核数无关, 一次一个任务.

并行:一个时间段内,执行个任务,可以同时运行两个或多个任务。 多核多进程, 指的是任务数小于等于cpu核数,即任务真的是一起执行的

并发:一个时间段中有几个任务都处于已启动运行到运行完毕之间,且这几个任务都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。多核多进程多线程, 
      指的是任务数多余cpu核数, 通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)


他们之间的区别:

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。

你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。

你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。


串行的处理单个任务。

并发的处理多个任务的能力,不一定要同时。

并行的有同时处理多个任务的能力。

所以它们最关键的点就是:是否是『同时』。


2 同步和异步

      同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)


同步:同步就是协同步调,按预定的先后次序进行运行,发出一个功能调用时,在没有得到结果之前,该调用就不返回 按照顺序一个一个来,不会乱掉,更不会出现上面代码没有执行完就执行下面的代码.
          缺点:是解析的速度没有异步的快

异步:异步是接取一个任务,直接给后台,再接下一个任务,执行结果如何,当前线程不管,接着往下顺序执行代码,
      异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
      缺点:没有顺序 ,谁先读取完先执行谁的 ,会出现上面的代码还没出来下面的就已经出来了,会报错


3 阻塞和非阻塞:

    阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

    阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
    非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
        区别: 会不会阻塞当前程序运行
* 在进程通信层面, 阻塞/非阻塞, 同步/异步基本是同义词, 在 IO 系统调用层面( IO system call )层面, 非阻塞 IO 系统调用 和 异步 IO 系统调用存在着一定的差别, 它们都不会阻塞进程, 但是返回结果的方式和内容有所差别, 但是都属于非阻塞系统调用( non-blocing system call )

什么时候需要异步:

(1)需要等待的时候,等待过程不能卡在这吧

(2)等待过程不像alert一样阻塞程序运行

(3)等待的情况都要异步

使用异步的场景:

(1)定时任务,setTimeout,setInterval

(2)网络请求: ajax请求,动态加载

(3)事件绑定,点击等交互事件

阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。

1.同步与异步

     同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)

所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由*调用者*主动等待这个*调用*的结果。
而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

2. 阻塞与非阻塞
    阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

4 进程和线程的关系:
      一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元。线 程是进程的一个实体,是CPU调度和分派的基本单位

进程是系统进行资源分配和调度的一个独立单位.在执行过程中拥有独立的内存单元, 同一进程的所有线程共享该进程的所有资源
线程是进程的一个实体,是CPU调度和分派的基本单位,即真正在cpu上运行的是线程,它是比进程更小的能独立运行的基本单位.
线线程不能够独立执行,必须依存在进程中, 共享内存
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
      优缺点:线程是最小的执行单元,进程是最小的资源管理单元, 线程执行开销小,但不利于  资源的管理和保护;而进程正相反。

参考:

https://www.zhihu.com/question/19732473/answer/241673170

https://www.cnblogs.com/whatisfantasy/p/6440585.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

**星光*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值