并发:多个任务同时交给一个处理器,处理器采用一定的调度规则去处理这些任务。<br>
并行:多个任务同时交给多个处理器,多个处理器各自采用一定的调度规则去处理这些任务。
区别:
并发和并行的根本区别就是有几个处理器处理任务。<br>
单处理器时在某一时刻只能处理一个任务。<br>
多处理器时则某一时刻可以处理多个任务。
go语言执行时默认在一个线程内,goroutine的执行顺序由调度器控制。类似多线程,但是调度规则是go语言实现,而且操作系统。
楼主的说法有一些问题。并发和并行并不是互斥关系,并没有“并发就不能并行”的规定。楼主说并发必须是“一个处理器”,其实应该是:
多个处理器就是并行,单个处理器就不是并行,但“几个处理器”和“是不是并发”没关系。
“并发”(concurrency)描述的是任务的**产生**模式。一个任务已经开始处理,但还没完成时,或者一个任务还没开始处理前,又来了第二个任务,这就是并发。
“并行”(parallel)描述的是**并发**任务的**处理**模式。有多种方式来处理“并发”,“并行”是其中一种模式,也就是多个处理器同时运行。还有其他的模式,比如单处理器。
如果任务不是并发的,不管是一个处理器还是多个处理器,都得一个任务一个任务完成(因为一个任务完成前下一个任务压根没来)。
要举个例子就是,有很多顾客会到银行办理业务,一个顾客在办完业务之前,下一个顾客也到达银行,导致银行大厅里有多个顾客,这就是“并发”。如果银行有多柜台开着,同时处理多个顾客的业务,不管每个柜台是怎么做的,这都是“并行”。而如果银行只有一个柜台开着,那么都不是并行。
[参考资料](https://softwareengineering.stackexchange.com/questions/190719/the-difference-between-concurrent-and-parallel-execution)
#5
更多评论