个人认为的同步 异步 多线程 单核 多核 并行的区别
2012-05-23 15:18
513 查看
我认为大家将异步的概念 和多线程混淆在一起了
举个简单的例子, 假设我要做 烧开水,举杠铃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 的业务, 比如举杠铃的业务, 在单核情况下 多线和单线 没有区别。
多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说
比效率是比不上异步的。 而且多线很容易写, 相对效率也高。
多核的好处,就是可以同时做事情, 这个和单核完全不一样的。
至于多核运行 这3个线程的情况 就留给你们自己完成了。
举个简单的例子, 假设我要做 烧开水,举杠铃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 的业务, 比如举杠铃的业务, 在单核情况下 多线和单线 没有区别。
多线程的好处,比较容易的实现了 异步切换的思想, 因为异步的程序很难写的。多线程本身程还是以同步完成,但是应该说
比效率是比不上异步的。 而且多线很容易写, 相对效率也高。
多核的好处,就是可以同时做事情, 这个和单核完全不一样的。
至于多核运行 这3个线程的情况 就留给你们自己完成了。
相关文章推荐
- 个人认为的同步 异步 多线程 单核 多核 并行的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发执行,进程同步,进程互斥,异步,并行,多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 互斥 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程 阻塞 非阻塞的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发 并行 同步 异步 多线程的区别
- 并发和并行,多线程和多进程,单核和多核,同步和异步的关系