線程、進程的概念實際上已經糾結N久了,不過好在多少有些瞭解了,但總感受還不是那麼通透。
碰巧晚飯時與室友爭論了一個問題,與線程的問題很類同,爲了能通俗易懂的給室友講明白,着實消耗了很多腦細胞。所幸最終他表示明白了(至因而真是假便不清楚了,不過至少我本身感受通透了許多)。
鑑於抱着一顆開源共享的心,便稍加整理,拿來浪一下啦!多線程
其實,CPU是個很笨的傢伙,笨到只會作最簡單的事,並且一次還只能作一件最簡單的事,而它能作的全部的事掰着指頭數來數去也就那麼幾件。多了、複雜了,抱歉,不會!操作系統
CPU僅會作的那幾件事呢,就叫作CPU指令
。線程
雖然CPU這傢伙很笨,但仍是有優勢的,並且這優勢還很讓人喜歡。什麼優勢呢?快!準!code
雖然CPU只會那麼幾個指令,可是已經夠了,由於那些複雜的事均可以用這些指令進行排列組合來完成。因此啊,CPU一點兒也不怕麻煩。進程
因爲CPU幹活又快又準,因此不少事均可以讓他來作。可是CPU這小了實在是太傻愣傻愣了,爲了防止這傻小子悶着頭只顧作手頭上的事,把其它事都拋到了腦後,就有個頭腦還算靈光的傢伙跑來指揮CPU,這個傢伙就是操做系統(更準確的說是分時操做系統),也叫OS。資源
OS規定CPU作一件事只能用一小段時間(這一小段時間就叫時間片),並且時間到了必須放下手頭的事,去作下一件事,無論手頭上的事有沒有作完。事實上OS把每一件事的進度都記錄了下來,下次輪到這件事時就讓CPU接着原來的進度繼續幹下去。get
因爲CPU幹活實在是太快太快了,因此感受就像同時在作全部安排給他的事。同步
無論是進程仍是線程,其實都是任務。任務也分大小的,一個大任務能夠包含若干小任務,並且一個大任務至少要有一個小任務。一個大任務就是一個進程,一個小任務就是一個線程。it
把這些任務交給OS,OS就根據狀況作規劃,給每一個任務分配合理的時間片,而後安排CPU來完成。多進程
一個大任務只有一個小任務,那這個大任務就叫作單線程,不然就叫多線程。
舉個栗子:
- 小明在唱歌,並且在唱歌是其它的事都不作。這就是單線程。
- 小明一邊唱歌,一邊跳舞。這就是多線程。
- 小明一邊唱歌,一邊吃飯。這也是多線程,只不過這兩個小任務都用到了嘴巴,因此執行起來就會麻煩不少,解決麻煩的辦法就是線程同步。
直接舉栗子:
- 小明本身放風箏。這就是單進程。
- 小明和小紅都在放本身的風箏。這是一種多進程,只不過兩個進程是獨立的。
- 小明和小紅一塊兒放大蜈蚣風箏。這是另外一種多進程,進程之間須要配合,也存在相似
多線程
的麻煩。這方面的問題沒有詳細瞭解過,就很少扯了。
再次舉栗子:
- 小明一邊唱歌,一邊跳舞。這是多線程,用的都是小明的身體(資源)。
- 小明唱歌,小紅跳舞。這是多進程,各自用各自的身體(資源)。
- 小明和小紅合唱。這也是多進程,各自用各自的身體(資源)。
單核、多核是針對CPU來講的。
繼續舉栗子說明:
- 普通人。單核。
- 哪吒。多核。
若有不對之處,還望大俠指正!