亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

國(guó)內(nèi)外個(gè)人免費(fèi)云服務(wù)器推薦 liunx服務(wù)器搭建與管理( 二 )


在線程池技術(shù)中,提到了一個(gè)公共的任務(wù)隊(duì)列,各個(gè)工作線程需要從中提取任務(wù)進(jìn)行處理,這里就涉及到多個(gè)工作線程對(duì)這個(gè)公共隊(duì)列的同步操作 。
需要C/C++ Linux服務(wù)器架構(gòu)師學(xué)習(xí)資料加群812855908(資料包括C/C++,Linux,golang技術(shù),內(nèi)核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK,ffmpeg等)
有沒(méi)有一些輕量級(jí)的方案來(lái)實(shí)現(xiàn)多線程安全的訪問(wèn)數(shù)據(jù)呢?這個(gè)時(shí)候,你需要:
無(wú)鎖編程技術(shù)多線程并發(fā)編程中,遇到公共數(shù)據(jù)時(shí)就需要進(jìn)行線程同步 。而這里的同步又可以分為阻塞型同步和非阻塞型同步 。
阻塞型同步好理解,我們常用的互斥體、信號(hào)、條件變量等這些操作系統(tǒng)提供的機(jī)制都屬于阻塞型同步,其本質(zhì)都是要加“鎖” 。
與之對(duì)應(yīng)的非阻塞型同步就是在無(wú)鎖的情況下實(shí)現(xiàn)同步,目前有三類(lèi)技術(shù)方案:
Wait-freeLock-freeObstruction-free三類(lèi)技術(shù)方案都是通過(guò)一定的算法和技術(shù)手段來(lái)實(shí)現(xiàn)不用阻塞等待而實(shí)現(xiàn)同步,這其中又以Lock-free最為應(yīng)用廣泛 。
Lock-free能夠廣泛應(yīng)用得益于目前主流的CPU都提供了原子級(jí)別的read-modify-write原語(yǔ),這就是著名的CAS(Compare-And-Swap)操作 。在Intel x86系列處理器上,就是cmpxchg系列指令 。
// 通過(guò)CAS操作實(shí)現(xiàn)Lock-freedo {...} while(!CAS(ptr,old_data,new_data ))我們常常見(jiàn)到的無(wú)鎖隊(duì)列、無(wú)鎖鏈表、無(wú)鎖HashMap等數(shù)據(jù)結(jié)構(gòu),其無(wú)鎖的核心大都來(lái)源于此 。在日常開(kāi)發(fā)中,恰當(dāng)?shù)倪\(yùn)用無(wú)鎖化編程技術(shù),可以有效地降低多線程阻塞和切換帶來(lái)的額外開(kāi)銷(xiāo),提升性能 。
服務(wù)器上線了一段時(shí)間,發(fā)現(xiàn)服務(wù)經(jīng)常崩潰異常,排查發(fā)現(xiàn)是工作線程代碼bug,一崩潰整個(gè)服務(wù)都不可用了 。于是你決定把工作線程和主線程拆開(kāi)到不同的進(jìn)程中,工作線程崩潰不能影響整體的服務(wù) 。這個(gè)時(shí)候出現(xiàn)了多進(jìn)程,你需要:
進(jìn)程間通信技術(shù)提起進(jìn)程間通信,你能想到的是什么?
管道命名管道socket消息隊(duì)列信號(hào)信號(hào)量共享內(nèi)存以上各種進(jìn)程間通信的方式詳細(xì)介紹和比較,推薦一篇文章淺析進(jìn)程間通信的幾種方式(含實(shí)例源碼),這里不再贅述 。
對(duì)于本地進(jìn)程間需要高頻次的大量數(shù)據(jù)交互,首推共享內(nèi)存這種方案 。
現(xiàn)代操作系統(tǒng)普遍采用了基于虛擬內(nèi)存的管理方案,在這種內(nèi)存管理方式之下,各個(gè)進(jìn)程之間進(jìn)行了強(qiáng)制隔離 。程序代碼中使用的內(nèi)存地址均是一個(gè)虛擬地址,由操作系統(tǒng)的內(nèi)存管理算法提前分配映射到對(duì)應(yīng)的物理內(nèi)存頁(yè)面,CPU在執(zhí)行代碼指令時(shí),對(duì)訪問(wèn)到的內(nèi)存地址再進(jìn)行實(shí)時(shí)的轉(zhuǎn)換翻譯 。
從上圖可以看出,不同進(jìn)程之中,雖然是同一個(gè)內(nèi)存地址,最終在操作系統(tǒng)和CPU的配合下,實(shí)際存儲(chǔ)數(shù)據(jù)的內(nèi)存頁(yè)面卻是不同的 。
而共享內(nèi)存這種進(jìn)程間通信方案的核心在于:如果讓同一個(gè)物理內(nèi)存頁(yè)面映射到兩個(gè)進(jìn)程地址空間中,雙方不是就可以直接讀寫(xiě),而無(wú)需拷貝了嗎?
當(dāng)然,共享內(nèi)存只是最終的數(shù)據(jù)傳輸載體,雙方要實(shí)現(xiàn)通信還得借助信號(hào)、信號(hào)量等其他通知機(jī)制 。
用上了高性能的共享內(nèi)存通信機(jī)制,多個(gè)服務(wù)進(jìn)程之間就可以愉快的工作了,即便有工作進(jìn)程出現(xiàn)Crash,整個(gè)服務(wù)也不至于癱瘓 。
不久,老板增加需求了,不再滿(mǎn)足于只能提供靜態(tài)網(wǎng)頁(yè)瀏覽了,需要能夠?qū)崿F(xiàn)動(dòng)態(tài)交互 。這一次老板還算良心,給你加了一臺(tái)硬件服務(wù)器 。
于是你用Java/PHP/Python等語(yǔ)言搞了一套web開(kāi)發(fā)框架,單獨(dú)起了一個(gè)服務(wù),用來(lái)提供動(dòng)態(tài)網(wǎng)頁(yè)支持,和原來(lái)等靜態(tài)內(nèi)容服務(wù)器配合工作 。
這個(gè)時(shí)候你發(fā)現(xiàn),靜態(tài)服務(wù)和動(dòng)態(tài)服務(wù)之間經(jīng)常需要通信 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!

「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助: