最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux之多線程以及多線程并發(fā)訪問同一塊內存的處理問題

 更新時間:2023年03月23日 14:16:08   作者:Dutkig  
這篇文章主要介紹了Linux之多線程以及多線程并發(fā)訪問同一塊內存的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

為什么需要多線程?

  • 并行實體共享同一個地址空間和所有可用數據 的這種能力是多進程鎖無法表達的,因為多進程具有不同的地址空間;
  • 線程比進程更加輕量級,更加快速;
  • 需要大量IO處理和計算時,擁有多線程,能夠很明顯地提升性能;
  • 在多CPU系統(tǒng)中,多線程是有益的,在這樣的系統(tǒng)中,能夠真正實現物理上的多線程并行運行;

之前我們學習了線程庫內置函數的一些使用,接下來我們來討論多線程在并發(fā)執(zhí)行過程中的一些問題,我們采取訪問同一塊內存的方式來探究。

多線程的優(yōu)點

  • 加快程序響應速度;
  • 當前無需要處理的任務時,可將處理器時間讓給其他任務;
  • 占用大量處理時間的任務可以定期將處理器時間讓給其他任務;
  • 可以隨時停止任務;
  • 可以分別設置各個任務的優(yōu)先級以優(yōu)化性能;

最佳應用場景

  • 耗時或大量占用處理器的任務阻塞用戶界面操作;
  • 各個任務必須等待外部資源;(如遠程連接或INternet連接)

多線程的缺點

  • 等候使用共享資源時會使得程序的運行速度變慢,這些共享資源主要是獨占性資源,如打印機;
  • 對線程進行管理需要額外的CPU開銷;
  • 線程的死鎖,即較長時間等待或資源競爭,
  • 對公有變量的同時讀或寫往往會產生無法預知的錯誤

驗證思路

對同一個全局變量(初始值為0),使用五個線程函數進行++操作,每個線程函數++1000次,因此,我們5個線程就應該++5000次,最后該全局變量的值應該為5000。

然而不同次的嘗試執(zhí)行,卻發(fā)現最終wg的值有時候是5000,有時候又是4997,4998。 

原因是:

我們對wg++,并不是原子操作,轉換為指令,有多條指令構成,計算機執(zhí)行的二進制的指令對變量的自增這一操作分了很多步驟,比如有兩條線程對wg++

但是++不是一下子可以完成,先將val讀過來,再++,再讀回去,這個操作還沒結束,另外一個線程也把wg讀過來,++,再讀回去。有可能兩個線程對wg=1;進行加加,最后值卻為2。

我們不能僅僅停留在代碼層面考慮問題,我們還需要考慮代碼運行的環(huán)境,觀察我們虛擬機的設置發(fā)現:有4個處理器,至少有兩個處理器有處理其他線程,存在一個線程放在2個處理器上的情況,同時訪問,出現小于5000的概率比較高,這也是因為并行執(zhí)行引起的。

調成1個處理器,此時的5個線程,只有1個線程執(zhí)行,其余4個肯定沒有執(zhí)行,不出現同時執(zhí)行兩個線程的情況。

出現小于5000的概率很?。ㄟ@個原因是,把val值1讀過來,還沒來得及++回去,這個時候時間片到了,發(fā)生了切換,換到其余線程,讀過來還是1,加加,現場恢復,還是1進行加加,這種場景出現的概率非常?。?個處理器不能并行的。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Linux實現文件內容去重及求交并差集

    Linux實現文件內容去重及求交并差集

    這篇文章主要介紹了Linux實現文件內容去重及求交并差集,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Linux環(huán)境使用g++編譯C++方法總結

    Linux環(huán)境使用g++編譯C++方法總結

    本篇文章給大家分享了在Linux環(huán)境中用g++編譯C++的方法以及相關實例代碼分享,有興趣的朋友學習下。
    2018-03-03
  • linux服務器之間傳輸文件的四種方式

    linux服務器之間傳輸文件的四種方式

    這篇文章主要介紹了linux服務器之間傳輸文件的四種方式的相關資料,需要的朋友可以參考下
    2016-04-04
  • CentOS 服務器安全配置策略

    CentOS 服務器安全配置策略

    近期服務器頻繁有被暴力破解,大致分析了一下入侵行為,整理了常用的安全策略,需要的朋友可以參考下
    2019-11-11
  • Linux發(fā)郵件之mail命令詳解

    Linux發(fā)郵件之mail命令詳解

    這篇文章主要介紹了Linux發(fā)郵件之mail命令詳解,詳細的講解了mail命令的用法等,非常具有實用價值,需要的朋友可以參考下。
    2016-12-12
  • ubuntu lamp(apache+mysql+php) 環(huán)境搭建及相關擴展更新

    ubuntu lamp(apache+mysql+php) 環(huán)境搭建及相關擴展更新

    ubuntu lamp(apache+mysql+php) 環(huán)境搭建及相關擴展更新,需要的朋友可以參考下。
    2011-05-05
  • linux環(huán)境之kerberos服務安裝方式

    linux環(huán)境之kerberos服務安裝方式

    本文記錄了在Linux環(huán)境下搭建Kerberos服務的詳細步驟,包括安裝時間同步服務、配置Kerberos服務、編輯配置文件、創(chuàng)建realm、開啟服務等,同時,介紹了如何創(chuàng)建和使用keytab文件,以及客戶端的安裝和使用,為需要開啟Kafka Kerberos認證的用戶提供了實用指南
    2024-10-10
  • Linux 查看cpu 信息的命令及簡單實例

    Linux 查看cpu 信息的命令及簡單實例

    這篇文章主要介紹了Linux 查看cpu 信息的命令及簡單實例的相關資料,需要的朋友可以參考下
    2016-10-10
  • 詳解CentOS7下安裝Mysql和配置mysql

    詳解CentOS7下安裝Mysql和配置mysql

    本篇文章主要介紹了詳解CentOS7下安裝Mysql和配置mysql,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • Apache POI用法示例詳解

    Apache POI用法示例詳解

    Apache POI是一個開源的Java API,用于處理Microsoft Office文檔,提供了多種組件,例如HSSF、XSSF等,以支持不同格式如Excel、Word、PowerPoint等文件的讀寫操作,本文介紹Apache POI用法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評論

江城| 百色市| 攀枝花市| 罗山县| 印江| 玛沁县| 清水县| 甘谷县| 普兰县| 芒康县| 色达县| 新兴县| 治县。| 长丰县| 榆树市| 普洱| 陕西省| 遵义市| 阳江市| 仲巴县| 新密市| 东乌珠穆沁旗| 西乌珠穆沁旗| 彩票| 波密县| 长葛市| 澜沧| 开阳县| 伊春市| 石阡县| 博爱县| 汉中市| 休宁县| 凤山县| 房产| 阿瓦提县| 恩平市| 宜兰市| 江阴市| 潮安县| 沾益县|