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