只是一个概念问题, 并不是很复杂, 网络上大多数的解释是:
并发(concurrency):
指应用能够交替执行不同的任务
例:吃完饭-->喝口水-->继续吃饭-->再喝口水-->再吃饭......
这时候时候就算是喝水和吃饭并发执行
并行(parallellism):
指应用能够同时执行不同的任务
例:吃饭的时候边吃饭边打电话,这两件事情可以同时执行
这时候时候就算是吃饭和打电话并行执行
以上的定义也不能称之为错, 大概是这么个意思, 只是不算准确, 会让人理解上有偏差
以下是详细些的解释:
- 并发是两个任务可以在重叠的时间段内启动,运行和完成。
- 并行是任务在同一时间点运行,例如,在多核处理器上。
- 并发是一次处理很多事情,并行是同时做很多事情。
应用程序可以是并发的,但不是并行的,这意味着它可以同时处理多个任务,但是没有两个任务在同一时刻执行。
应用程序可以是并行的,但不是并发的,这意味着它同时处理多核CPU中的任务的多个子任务。
一个应用程序可以即不是并行的,也不是并发的,这意味着它一次一个地处理所有任务。
应用程序可以既是并行的也是并发的,这意味着它同时在多核CPU中同时处理多个任务
用通俗的话解释:
并行才是我们通常认为的那个同时做多件事情,而并发则是在线程这个模型下产生的概念。
并发表示同时发生了多件事情,通过时间片切换,哪怕只有单一的核心,也可以实现“同时做多件事情”这个效果。
根据底层是否有多处理器,并发与并行是可以等效的,这并不是两个互斥的概念。
举个开发中会遇到的例子,我们说资源请求并发数达到了1万。这里的意思是有1万个请求同时过来了。但是这里很明显不可能真正的同时去处理这1万个请求的吧!
如果这台机器的处理器有4个核心,不考虑超线程,那么我们认为同时会有4个线程在跑。也就是说,并发访问数是1万,而底层真实的并行处理的请求数是4。如果并发数小一些只有4的话,又或者你的机器牛逼有1万个核心,那并发在这里和并行一个效果。
也就是说,并发可以是虚拟的同时执行,也可以是真的同时执行。而并行的意思是真的同时执行。
结论是:并行是我们物理时空观下的同时执行,而并发则是操作系统用线程这个模型抽象之后站在线程的视角上看到的“同时”执行
参考以下博主: (感谢博主!)
https://www.cnblogs.com/bughui/p/7422214.html