線程、併發中的基本概念

知識圖譜https://naotu.baidu.com/file/b8a70ff9e7f3af1437594b2d0fb4ebfd?token=11150672c00909cb

Java 知識目錄

線程、進程

基本概念

進程是程序的真正運行的實例,是資源分配的基本單位
線程是CPU的基本調度單位,每個線程執行的進程代碼的某個片段

線程、進程關係與區別

關係

操作系統中可以包含多個進程,每個進程可以包含多個線程

區別
  • 起源:先有線程後有進程
  • 概念
  • 內存共享方式:默認情況下,內存無法與其他進程共享。線程共享 由系統分配給父進程的內存塊
  • 擁有資源
    • 進程擁有獨立的內存,而線程只擁有在運行中必不可少的資源,但他可以與同進程下的線程分享進程擁有的全部資源
    • 線程共享的內容:比如進程的代碼塊
    • 線程獨立的內容:比如線程的堆棧
  • 數量:一個程序至少有一個進程,一個進程至少有一個線程
  • 開銷
    • 線程的創建時間比進程短
    • 同一進程內的線程切換時間比進程短
    • 同一進程內的線程共享內存和文件資源,可以不通過內核進行通信
相同點

運行狀態:就緒、等待、運行等

Java 與 多線程的關係

  • Java 天生支持多線程
  • Java 線程會一對一映射到操作系統
  • JVM自動啓動線程

多線程

什麼是多線程

多線程指單個進程中運行多個線程,如果一個程序允許運行多個線程,那麼他就是多線程程序

爲什麼使用多線程

  • 提高CPU利用率
    • 提高處理速度
    • 避免無效等待
    • 提高用戶體驗:避免卡頓,縮短等待時間:比如 tomact,同時接收多個請求
  • 便於編程建模
  • 計算機性能定律:阿姆達爾定律
    一般情況下,處理器越多,程序的執行速度就越快,但是會有一個上限,上限取決於程序中串行的比例。並行越多,多處理器效果越明顯。

什麼場景會使用到多線程

  • 什麼時候開啓:通常在需要進行耗時任務時開始,比如IO讀寫,或從網絡獲取信息
  • 爲了同時做多種不同的事情:
  • 爲了提高工作效率:tomactNIO
  • 獲取高併發量:壓測

多線程的侷限

  • 上下文切換帶來的損耗
  • 異構化任務很難高效並行
  • 線程安全問題:死鎖

串行、並行、併發

  • **串行:**單線程,多個任務,順序執行
  • **並行:**多線程,多個任務,同時執行
  • **併發:**可單線程,也可多線程。只要保證一段時間內只有一個任務執行即可。
  • **併發性:**程序的不同部分可以無序的同時執行,且不影響最終結果
  • 並行必定可以併發,

多線程、高併發

  • **高併發:**高併發是用戶訪問量劇增導致的一種狀態
  • 多線程是高併發的一種解決方案。
  • 高併發不一定需要多線程處理,Redis 底層單核也可以處理

同步異步、阻塞非阻塞

  • 訪問者爲客戶端,被訪問者爲服務器爲例
  • 同步異步是服務器的行爲
  • 阻塞非阻塞是客戶端的行爲
  • **同步:**客戶端發出一個請求後,在沒有得到結果之前,服務端不返回任何結果。但一旦返回就是客戶端想要的結果
  • **異步:**請求發出後,服務器立即返回信息表示接收到請求,然後服務器會處理請求,得到結果後再返回。在此期間,客戶端可以進行其他操作。
  • **阻塞/非阻塞:**客戶端發出請求,在請求結果返回前,客戶端是否進行其他操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章