並行與併發,進程與線程

雖然對於基本概念瞭然於心,但是每隔一段時間看到別人寫的,總是會再點進去看看,哎,就會有不一樣的感受。

並行與併發。

並行: 同一時刻,兩個線程都在執行。
併發 :是同一時刻,只有一個執行,但是一個時間段內,兩個線程都執行了。
並行與併發的圖例

————————————————————————————————————————————
有次同事開玩笑說,寫什麼多線程,cpu 就那麼一個或者兩個,有些還是僞雙核,同一時刻執行的肯定只有一個線程在運行計算,你寫多線程不也沒什麼用嗎,忽然之間有點蒙,好似是這個道理啊,同一時刻只有一個線程在跑啊,做什麼多線程啊。
待了一會兒想了想不對:

  • 同一時刻的確只有一個核 在執行一個線程,但是多核就不一樣了,現在服務器都是雙核四核什麼的,效率肯定會提高,
  • 線程會偷懶,一個任務需要多方面寫作,io ,cpu計算、、、 有時會阻塞等待等待io或者其他完成之後再cpu上完成剩下的,多線程的話就會提高cpu的利用率,而NIO 及AIO和由此產生的netty,mina框架之類都是一樣的作用。

進程與線程

加粗的部分有些詞語用的很好,有一語中的的趕腳
  • 一個程序至少一個進程,一個進程至少一個線程
  • 每個進程都有獨立的內存地址空間;系統不會爲線程分配內存,線程組之間只能共享所屬進程的資源
  • 程序之間的切換會有較大的開銷;線程之間切換的開銷小
  • 進程是系統進行資源分配和調度的一個獨立單位;線程是進程的一個實體,是CPU調度和分派的基本單位
  • 根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
  • 在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
  • 所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
  • 內存分配方面:系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
  • 包含關係:沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱爲輕權進程或者輕量級進程。

借鑑兩位大佬的,本文是轉載綜合,整合加上自己今天的體悟。

原文鏈接:kingdoooom
原文鏈接:ConstXiong

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章