多線程、多進程、多核

前言

線程、進程的概念實際上已經糾結N久了,不過好在多少有些瞭解了,但總感受還不是那麼通透。
碰巧晚飯時與室友爭論了一個問題,與線程的問題很類同,爲了能通俗易懂的給室友講明白,着實消耗了很多腦細胞。所幸最終他表示明白了(至因而真是假便不清楚了,不過至少我本身感受通透了許多)。
鑑於抱着一顆開源共享的心,便稍加整理,拿來浪一下啦!多線程

CPU

其實,CPU是個很笨的傢伙,笨到只會作最簡單的事,並且一次還只能作一件最簡單的事,而它能作的全部的事掰着指頭數來數去也就那麼幾件。多了、複雜了,抱歉,不會!操作系統

CPU僅會作的那幾件事呢,就叫作CPU指令線程

雖然CPU這傢伙很笨,但仍是有優勢的,並且這優勢還很讓人喜歡。什麼優勢呢?code

時間片

雖然CPU只會那麼幾個指令,可是已經夠了,由於那些複雜的事均可以用這些指令進行排列組合來完成。因此啊,CPU一點兒也不怕麻煩。進程

因爲CPU幹活又快又準,因此不少事均可以讓他來作。可是CPU這小了實在是太傻愣傻愣了,爲了防止這傻小子悶着頭只顧作手頭上的事,把其它事都拋到了腦後,就有個頭腦還算靈光的傢伙跑來指揮CPU,這個傢伙就是操做系統(更準確的說是分時操做系統),也叫OS資源

OS規定CPU作一件事只能用一小段時間(這一小段時間就叫時間片),並且時間到了必須放下手頭的事,去作下一件事,無論手頭上的事有沒有作完。事實上OS把每一件事的進度都記錄了下來,下次輪到這件事時就讓CPU接着原來的進度繼續幹下去。get

因爲CPU幹活實在是太快太快了,因此感受就像同時在作全部安排給他的事。同步

進程&線程

無論是進程仍是線程,其實都是任務。任務也分大小的,一個大任務能夠包含若干小任務,並且一個大任務至少要有一個小任務。一個大任務就是一個進程,一個小任務就是一個線程it

把這些任務交給OS,OS就根據狀況作規劃,給每一個任務分配合理的時間片,而後安排CPU來完成。多進程

單線程&多線程

一個大任務只有一個小任務,那這個大任務就叫作單線程,不然就叫多線程

舉個栗子:

  • 小明在唱歌,並且在唱歌是其它的事都不作。這就是單線程
  • 小明一邊唱歌,一邊跳舞。這就是多線程
  • 小明一邊唱歌,一邊吃飯。這也是多線程,只不過這兩個小任務都用到了嘴巴,因此執行起來就會麻煩不少,解決麻煩的辦法就是線程同步

多進程

直接舉栗子:

  • 小明本身放風箏。這就是單進程
  • 小明和小紅都在放本身的風箏。這是一種多進程,只不過兩個進程是獨立的。
  • 小明和小紅一塊兒放大蜈蚣風箏。這是另外一種多進程,進程之間須要配合,也存在相似多線程的麻煩。這方面的問題沒有詳細瞭解過,就很少扯了。

多線程&多進程

再次舉栗子:

  • 小明一邊唱歌,一邊跳舞。這是多線程,用的都是小明的身體(資源)。
  • 小明唱歌,小紅跳舞。這是多進程,各自用各自的身體(資源)。
  • 小明和小紅合唱。這也是多進程,各自用各自的身體(資源)。

多核

單核、多核是針對CPU來講的。

繼續舉栗子說明:

  • 普通人。單核
  • 哪吒。多核

若有不對之處,還望大俠指正!

相關文章
相關標籤/搜索