摘要:操作系統實戰臨界資源保護臨界資源進行通信線程間同步互斥量和讀寫鎖自旋鎖條件變量進程間同步共享內存域套接字重要概念用戶態與內核態上下文切換協程線程同步之互斥量互斥量鎖可以保證多線程的指令按順序執行,避免兩個線程的指令交叉執行即原子性原子性是指
操作系統實戰 臨界資源
保護臨界資源/進行通信
線程間同步
互斥量和 讀寫鎖 自旋鎖 條件變量
進程間同步
共享內存 域套接字
重要概念用戶態與內核態
上下文切換
協程
線程同步之互斥量互斥量(鎖)可以保證多線程的指令按順序執行,避免兩個線程的指令交叉執行(即 原子性)
原子性是指一系列操作指令不可被中斷執行,要么全部執行,要么全部沒有執行,不存在部分執行的情況
互斥量是最簡單的線程同步的方法
互斥量(互斥鎖)是處于兩態之一的變量: 解鎖 和 加鎖
兩個狀態可以保證資源訪問的串行
線程同步之自旋鎖操作系統直接提供了互斥量的API,可使用API完成資源的加鎖,解鎖的操作
pthread_mutex_t
自旋轉也是一種多線程同步的變量
使用自旋轉的線程會反復檢查鎖的變量是否可用
自旋轉不會讓出CPU,是一種忙等待 的狀態 (死循環等待鎖被釋放)
線程同步之讀寫鎖自旋鎖避免了進程或線程的**上下文切換**的開銷操作系統內部很多地方使用的是自旋鎖
自旋鎖不適合在單核CPU使用pthread_spinlock_t
當臨界資源屬于 多讀少寫 的情況,可以采用效率更高的同步方法:讀寫鎖 讀多寫少場景相比互斥量性能提出幾倍
讀寫鎖是一種特殊的 自旋鎖
允許多個讀者同時訪問資源以提高讀性能(讀 不改變臨界資源的值)
對于寫操作則是 互斥 的
pthread_rwlock_t線程同步之條件變量
pthread_relock_rdlock
pthread_rwlock_wrlock
在生產消費場景中面臨以下情況
1 緩沖區小于0時,不允許消費者消費,消費者必須等待
2 緩沖區滿時,不允許生產者往緩沖區生產,生產者必須等待
當生產者生產一個產品時,喚醒可能等待的消費者
當消費者消費一個產品時,喚醒可能等待的生產者pthread_cond_t 配合 互斥量(鎖)使用
pthread_cond_wait
pthread_cond_signal
條件變量是一種相對復雜的線程同步方法
條件變量允許線程睡眠,直到滿足某種條件
當滿足條件時,可以向該線程信號,通知喚醒
線程同步方法總結1 互斥鎖 最簡單的線程同步方法,會阻塞線程
2 自旋鎖 避免上下文切換的一種線程同步方法,屬性忙等待CPU
3 讀寫鎖 為多讀少寫的資源設計的線程同步方法,顯著提高性能
4 條件變量 相對復雜的多線程同步方法,配合互斥量,更靈活的使用場景
java python 等語言底層也是通過fork 創建進程
fork系統調用是用于創建進程的
fork創建的進程初始狀態與父進程一樣
系統會為fork的進程分配新的資源
fork系統調用無參數 fork會返回兩次 ,分別是子進程id 和 0
進程同步之共享內存進程的線程共享進程資源,理論上進程之間由于操作系統的進程管理機制(進程-頁表-物理內存),進程間的內存空間是相互獨立的,(進程默認是不能訪問進程空間之外的內存空間)但進程可以通過共享內存打破這樣的限制
共享存儲允許不相關的進程訪問同一片物理內存
共享存儲是兩個進程之間共享和傳遞數據最快的一種方式
共享內存未提供同步機制,需要借助其他機制管理訪問
共內存是高性能后臺開發中最常用的進程同步方式共享內存實現流程
1 申請共享內存
2 連接到進程空間
3 使用共享內存
4 脫離進程空間&刪除
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76278.html
摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術專家我看過哪些技術類書籍。 大家好,我是...
摘要:引入了新的環境和概要信息,是一種更揭秘與實戰六消息隊列篇掘金本文,講解如何集成,實現消息隊列。博客地址揭秘與實戰二數據緩存篇掘金本文,講解如何集成,實現緩存。 Spring Boot 揭秘與實戰(九) 應用監控篇 - HTTP 健康監控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...
摘要:今天開始實戰虛擬機之二虛擬機的工作模式。總計有個系列實戰虛擬機之一堆溢出處理實戰虛擬機之二虛擬機的工作模式實戰虛擬機之三的新生代實戰虛擬機之四禁用實戰虛擬機之五開啟編譯目前的虛擬機支持和兩種運行模式。 今天開始實戰Java虛擬機之二:虛擬機的工作模式。 總計有5個系列實戰Java虛擬機之一堆溢出處理實戰Java虛擬機之二虛擬機的工作模式實戰Java虛擬機之三G1的新生代GC實戰Jav...
閱讀 3289·2023-04-26 02:40
閱讀 4639·2021-09-22 15:22
閱讀 1573·2021-09-22 10:02
閱讀 3474·2021-08-11 10:23
閱讀 1388·2019-08-30 15:55
閱讀 2487·2019-08-30 12:48
閱讀 584·2019-08-30 11:04
閱讀 697·2019-08-29 16:29