日常生活中就有不少例子能夠去研究和理解併發和多線程。網絡
好比:多線程
作飯有幾個任務(說簡單點):煮飯、炒菜併發
同步就是,先去煮飯,等20分鐘飯煮好了再去炒菜;我想現實生活中沒有人去這樣作,這樣效率過低。spa
我不必等到把飯煮熟好了再去炒菜,能夠邊煮飯邊炒菜,併發進行;等菜炒完了,飯也煮好了;這樣節省了時間,提升了效率。線程
這裏面咱們能夠看到:事件
--併發:煮飯和炒菜是併發執行,我就是CPU(一我的單核);說明單核也能實現併發;同步
--IO阻塞:煮飯的電飯煲是一個相對耗時的處理動做,好比是一個網絡的請求效率
--非阻塞IO:我CPU按下煮飯操做後就跳出來去炒菜,這個就是非阻塞的IO處理請求
--事件驅動:飯好了以後有一個事件通知,好比叮的一聲,我CPU聽到事件能夠決定是否進行處理生活
----上下文切換和多核:若是老婆不在,則只能我本身去盛飯,須要停下炒菜的活兒。若是老婆在,我就跟老婆說飯好了,讓老婆去盛飯;我喊的過程是上下文切換,老婆去盛飯是另外一個CPU線程開始執行,我不用本身去作;這就是多核帶來的好處。