摘要:線程允許同一個進程中同時存在多個程序控制流。線程也被稱為輕量級進程。現代操作系統中,都是以線程為基本的調度單位,而不是進程。
并發簡史
在早期的計算機中不包含操作系統,從頭至尾都只執行一個程序,并且這個程序能訪問計算機所有資源。操作系統的出現使得計算機每次能運行多個程序,并且不同的程序都在多帶帶的進程中運行:操作系統為各個獨立執行的進程分配內存、文件句柄、安全證書等。不同進程之間通過一些粗粒度的通信機制交換數據,包括:套接字、信號處理器、共享內存、信號量以及文件等。
之所以在計算機中加入操作系統來實現多個程序同時執行,主要基于以下原因:
資源利用率:在某些情況下,程序如果在等待某個外部操作執行完成的同時,可以運行另一個程序,那無疑將提高資源的利用率。
公平性:通過粗粒度的時間分片運行方式,使得不同的用戶和程序對于計算機上的資源有著共同的使用權。
便利性:計算多個任務時,編寫多個程序,每個程序執行一個任務并在必要時相互通信,比之編寫一個程序來計算所有任務更容易實現。
這些促使進程出現的因素同樣也促使著線程的出現。線程允許同一個進程中同時存在多個程序控制流。線程會共享進程范圍內的資源(內存、文件句柄),但每個線程都有各自的程序計數器、棧、局部變量等。一個程序中的多個線程也可以同時被調度到多個CPU上運行。
線程也被稱為輕量級進程。現代操作系統中,都是以線程為基本的調度單位,而不是進程。
線程的優勢發揮多處理器的強大能力線程帶來的風險
建模的簡單性
異步事件的簡化處理
響應更靈敏的用戶界面
安全性問題
多個線程同時訪問和修改相同的變量時,會發生無法預料的數據變化,導致線程出現錯誤
活躍性問題
當某個操作無法繼續執行下去時:死鎖、饑餓、活鎖
性能問題
多線程程序中不僅存在于單線程程序相同的性能問題(服務時間過長、響應不靈敏、吞吐率過低、資源消耗過高、可伸縮行較低等),而且還存在由于使用線程而引入的其他性能問題:
在多線程程序中,當線程調度器臨時掛起活躍線程并轉而運行另一個線程時,會頻繁的出現上下文切換操作(Context
Switch),這種操作將帶來極大的開銷:保存和恢復執行上下文,丟失局部性,CPU花更多的時間在線程調度而不是線程運行上。
使用同步機制操作共享數據時,會抑制編譯器優化,是內存緩存區中的數據無效,以及增加共享內存總線的同步流量
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77892.html
摘要:前言并發編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。盡可能降低上下文切換的次數,有助于提高并發效率。死鎖并發編程中的另一挑戰是死鎖,會造成系統功能不可用。 前言 并發編程的目的是讓程序跑的更快,但并不是啟動更多的線程,這個程序就跑的更快。有以下幾種挑戰。 挑戰及方案 上下文切換 單核CPU上執行多線程任務,通過給每個線程分配CPU時間片的方式來實現這個機制。...
摘要:收集器用作高級歸約剛剛的結論又引出了優秀的函數式設計的另一個好處更易復合和重用。更具體地說,對流調用方法將對流中的元素觸發一個歸約操作由來參數化。另一個常見的返回單個值的歸約操作是對流中對象的一個數值字段求和。 用流收集數據 我們在前一章中學到,流可以用類似于數據庫的操作幫助你處理集合。你可以把Java 8的流看作花哨又懶惰的數據集迭代器。它們支持兩種類型的操作:中間操作(如 filt...
摘要:如何降低開發的復雜性最小侵入編程通過面向接口和依賴注入實現松耦合基于編程慣例和切面進行聲明式編程通過模板減少樣板式代碼容器在應用中,不再由對象自行創建或管理它們之間的依賴關系容器負責創建對象裝配對象配置它們并管理它們的整個生命周期。 歡迎大家關注我的微信公眾號,一起探討Java相關技術 showImg(https://segmentfault.com/img/bVboaBO?w=129...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:限制編寫并行流,存在一些與非并行流不一樣的約定。底層框架并行流在底層沿用的框架,遞歸式的分解問題,然后每段并行執行,最終由合并結果,返回最后的值。 本書第六章的讀書筆記,也是我這個系列的最后一篇讀書筆記。后面7、8、9章分別講的測試、調試與重構、設計和架構的原則以及使用Lambda表達式編寫并發程序,因為筆記不好整理,就不寫了,感興趣的同學自己買書來看吧。 并行化流操作 關于并行與并發...
閱讀 2772·2021-11-02 14:42
閱讀 3162·2021-10-08 10:04
閱讀 1183·2019-08-30 15:55
閱讀 1025·2019-08-30 15:54
閱讀 2310·2019-08-30 15:43
閱讀 1679·2019-08-29 15:18
閱讀 862·2019-08-29 11:11
閱讀 2362·2019-08-26 13:52