并发并行同步异步多线程的区别

原创 2017年02月17日 18:00:20

同步和异步的概念:
同步:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去

异步:异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

并发 并行 同步 异步 多线程的区别:
1.并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥

2.互斥:进程间相互排斥的使用临界资源的现象,就叫互斥。

3.同步:进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
其中并发又有伪并发和真并发,伪并发是指单核处理器的并发,真并发是指多核处理器的并发。

4.并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。从而可知,并行是针对多处理器而言的。并行是同时发生的多个并发事件,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。

5.多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。

6.异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。
异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

事例:
为了对以上概念的更好理解举一个简单例子,假设我要做烧开水,举杠铃100下,洗衣服3件事情。
烧开水 这件事情, 我要做的事情为,准备烧开水1分钟,等开水烧开 8 分钟,关掉烧水机1分钟
举杠铃100下 我要做的事情为, 举杠铃100下10分钟
洗衣服 我要做的事情为,准备洗衣服1分钟,等开水烧开 5 分钟,关掉洗衣机1分钟

单核情况下:
同步的完成,我需要做的时间为 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果异步:
就是在等的时候,我可以切换去做别的事情
准备烧开水(1) + 准备洗衣服(1) + 举50下杠铃 (5)分钟+ 关洗衣机 1分钟 + 举杠铃20下 (2)分钟+ 关烧水机 1分钟 + 举30下杠铃(3)分钟
1+1+5+1+2+1+3 =14分钟

双核 异步 并行:
核1 准备烧开水1分钟+ 举杠铃50下(5)分钟+ 等待3分钟 + 关掉烧水机1分钟
核2 准备洗衣服1分钟+ 举杠铃50下(5)分钟+ 关掉洗衣机1分钟 + 等待3分钟
其实只花了 1+5+3+1 = 10分钟
其中还有双核都等待了3分钟

双核 异步 非并行:
核1 举杠铃100下(10)分钟
核2 准备烧开水1分钟+ 准备洗衣服 1分钟+ 等待5分钟+ + 关掉烧水机1分钟 + 等待1分钟 + 关掉洗衣机1分钟
其实只花了1+5+3+1 = 10分钟

多线程的做法:
单核下
线程1 准备烧开水 1分钟, 等开水烧开 8 分钟 , 关掉烧水机 1分钟
线程2 举杠铃100下 10分钟
线程3 准备洗衣服 1分钟, 等开水烧开 5 分钟 , 关掉洗衣机 1分钟

cpu 可能这么切换 最理想的切换方式
线程1 准备烧开水1 sleep 1 sleep 5 sleep 1 sleep 2 关开水 1分钟 exit
线程2 sleep 1 sleep 1 举杠铃50 5分钟 sleep 1 举杠铃20 2分钟 sleep1 举杠铃30下 3分钟
线程3 sleep 1 准备洗衣服1 分钟 sleep 5 关洗衣机1分钟 exit
最后使用了 14分钟 和异步是一样的。
但是实际上是不一样的,因为线程不会按照我们设想的去跑,如果线程2举杠铃先跑,整个流程的速度就下来了。

总结:
异步和同步的区别:
在io等待的时候,同步不会切走,浪费了时间。
如果都是独占cpu 的业务,比如举杠铃的业务,在单核情况下多线程和单线程没有区别。

多线程的好处:
比较容易的实现了异步切换的思想,因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说
比效率是比不上异步的。而且多线很容易写,相对效率也高。

多核的好处,就是可以同时做事情,这个和单核完全不一样的。
附技术框架学习图谱:
http://download.csdn.net/detail/bryant_liu24/9738649

版权声明:本文为博主原创文章,未经博主允许不得转载。

并发 并行 同步 异步 多线程的区别

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥 2. 互斥:进程间相互排斥的使用临界资源的...
  • cqkxboy168
  • cqkxboy168
  • 2013年06月04日 22:18
  • 60601

线程与进程的区别以及对多线程并发的理解

转自: http://blog.sina.com.cn/s/blog_12f5264ff0102v8eq.html http://blog.csdn.net/suxinpingtao51/ar...
  • z69183787
  • z69183787
  • 2016年10月24日 11:49
  • 6833

同步线程和异步线程的区别

1:同步可以看做是一个单线程操作,只要客户端请求了,在服务器没有反馈信息之前是一个线程阻塞状态(就是假死状态,不能操作其他方法)。 2:异步肯定是个多线程。在客户端请求时,可以执行其他线程,并且...
  • u014419806
  • u014419806
  • 2016年10月10日 13:29
  • 10988

帮你快速理解同步 ,异步,并发/并行,串行

同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B。只存在一个线程。 异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B。任务B不用等待任务A结束才执行。存在多条线程。 ...
  • luobo140716
  • luobo140716
  • 2015年12月02日 12:53
  • 3500

线程操作中同步操作与异步操作的区别

在线程基础这一块。好多时候我们很容易将同步操作和异步操作的定义混淆。 按照平常的理解,同步操作应该是多个线程同时操作某些资源,而异步操作则是需要将不同的线程分离开来操作某个资源。但事实上,其定义却刚...
  • exception_all
  • exception_all
  • 2017年01月08日 20:59
  • 301

线程同步和线程异步有什么区别?

线程同步和线程异步有什么区别?(重要基础知识) 打个比方,如果你在等一个人, 同步的时候,你会一直等到她来了之后才做其他事情,这个过程除了等待你啥都不会做, 异步的时候,你一边在等,可能一边玩游...
  • mingliuboy
  • mingliuboy
  • 2012年01月06日 18:05
  • 12388

并发与并行的区别

学习多线程的时候会遇到一个名词:并发。这是属于操作系统中的词汇,需要了解并发和并行的区别,从网上搜集了几种说法帮助理解。 一: 并发是指一个处理器同时处理多个任务。 并行是指多个处理器或者是多核...
  • java_zero2one
  • java_zero2one
  • 2016年05月22日 23:17
  • 6076

线程同步和异步区别 异步机制

1 区别同步和异步 举个简单的例子 就是游戏 游戏会有图像和背景音乐 图像是由玩家操作的 而背景音乐一般都是循环播放玩家不能操作 这里的图像和声音就分别是不同的线程 图像一般是主线程 背景音乐...
  • wxqian25
  • wxqian25
  • 2013年07月23日 09:26
  • 11742

线程同步和异步区别 同步机制

线程同步和线程异步有什么区别?(重要基础知识) 打个比方,如果你在等一个人, 同步的时候,你会一直等到她来了之后才做其他事情,这个过程除了等待你啥都不会做, 异步的时候,你一边在等,可能一边玩游...
  • u011676589
  • u011676589
  • 2013年09月04日 12:56
  • 1647

并行、并发、同步、互斥

并行 计算机操作系统中的并行,指的是同时存在于内存中的多道作业都处于运行状态。实际上都是宏观上并行,微观上串行,因为这些作业都是开始各自的运行,但都没运行完毕,只是交替地使用cpu。     在操...
  • helianbing
  • helianbing
  • 2016年05月28日 11:42
  • 1686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:并发并行同步异步多线程的区别
举报原因:
原因补充:

(最多只允许输入30个字)