多线程执行分为串行,并发,并行。其中并发和并行概念容易混淆,恰巧去搓澡,突然豁然开朗,原来这样比喻一下就很容易区分开着三个概念了。就好比德彪和大帅去搓澡,那么就可能发生下面三种情况。
串行
德彪和大帅一起去搓澡,但是就剩一个搓澡师傅了,师傅说我先给大帅搓吧,搓完在搓德彪。德彪同意了,说罢就给大帅一顿搓,德彪等着搓完大帅就到他的了。这种搓法就可以叫串行搓澡。多个线程排队执行,执行完一个再执行另外一个。
并发
德彪和大帅又去搓澡了,又就剩一个师傅了,这时师傅说搓完大帅再搓德彪吧,德彪不干了,咋总是我后搓呢,大帅也不让着也必须就马上搓到,这时怎么办。师傅说了,既然你俩都想现在就搓上,那你俩一起趴这吧,我给你俩一起搓。就看师傅搓两下德彪又搓两下大帅,就这样反复来回搓,终于磨磨唧唧的全都搓完了。这种搓法可以叫并发搓澡了。多个线程由同一个cpu来回切换执行,看似同时执行其实同一时刻也只有一个线程在执行。
并行
德彪和大帅想咋每次去搓澡师傅都不够呢,我们换一家搓吧。于是他们换了一家继续搓,这家好了很多,有好几个搓澡师傅,俩人一人一个便开始搓起来了。这种搓法可以叫做并行搓澡了。多个线程同时在多个cpu上进行,同一时刻他们是同时发生的。