(1)從線程的時效來看:分為同步和非同步 同步:多個任務情況下,一個任務A執行結束,才可以執行另一個任務B。只存在一個線程。 非同步:多個任務情況下,一個任務A正在執行,同時可以執行另一個任務B。任務B不用等待任務A結束才執行。存在多條線程。 (2)從線程的執行來看:分為串列隊列和並行隊列 串列隊列:串 ...
(1)從線程的時效來看:分為同步和非同步
同步:多個任務情況下,一個任務A執行結束,才可以執行另一個任務B。只存在一個線程。
非同步:多個任務情況下,一個任務A正在執行,同時可以執行另一個任務B。任務B不用等待任務A結束才執行。存在多條線程。
(2)從線程的執行來看:分為串列隊列和並行隊列
串列隊列:串列隊列的特點是隊列內的線程是一個一個執行,直到結束。
並行隊列:並行隊列的特點是隊列中所有線程的執行結束時必須是一塊的,隊列中其他線程執行完畢後,會阻塞當前線程等待隊列中其他線程執行,然後一塊執行完畢。
(3)線程的時效與執行相結合:
圖片來源:https://blog.csdn.net/l540675759/article/details/62932901
(1)串列同步
圖1是串列同步的情況,隊列中的線程依次執行,並且主線程阻塞,等待任務的完成。
(2)並行同步
圖3是並行同步的情況,隊列中的線程,會一起執行,但是同一時段只能有一個線程執行其他線程等待,等所有任務執行完,主線程繼續執行。
同步(單線程)的串列並行區別在於:
1.並行增加了等待時間,如果等待時間到了,任務還在執行,那麼,重新設置等待時間,繼續等待,不管等待的時候線程是否有空閑。
2.串列是對線程進行阻塞,一個任務執行完畢,線程不再阻塞,所以,不存在等待時間。
(3)串列非同步
圖2是串列非同步的情況,隊列中的線程依次執行,同時主線程還在繼續執行。
(4)並行非同步
圖4是並行非同步的情況,隊列中的線程,一起執行,主線程也會繼續執行。
非同步(多線程)的串列並行區別在於:
1.串列非同步只占用兩個線程,一個主線程,不會阻塞的線程,一個次線程,執行原理和同步串列一樣。
2.並行非同步占用N個線程,多核CUP可以同時開啟多條線程供多個任務同時執行,互不幹擾。
(4)同步的並行即為併發(常見於es7的async await與node的單線程)。