0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么多線程編程這么難呢

jf_78858299 ? 來源:碼農(nóng)的荒島求生 ? 作者:碼農(nóng)的荒島求生 ? 2023-02-24 13:51 ? 次閱讀

周末了,美美的睡個(gè)懶覺起來做早飯,做飯其實(shí)很簡(jiǎn)單,照著菜譜一步步來就行,沒什么難度。

在你做飯時(shí)突然手機(jī)鈴聲大作,原來是線上出現(xiàn)了故障,其它同事正在排查,需要你協(xié)助一下,一邊做飯一邊打電話應(yīng)該也不算太難,你可以的。

正當(dāng)你一邊排查問題一邊做飯時(shí)本來約好明天來維修空調(diào)的師傅因?yàn)閰f(xié)調(diào)不開提前一天來了,你不得不一邊做飯一邊排查問題一邊告訴維修師傅哪個(gè)空調(diào)壞了、問題是啥。。怎么樣,是不是開始應(yīng)付不過來了?

這還不算啥,就在這時(shí)你約好的同學(xué)也到了,一邊接待同學(xué)一邊指揮著維修師傅一邊排查問題一邊做早飯,你是不是已經(jīng)開始瘋了。

當(dāng)多線程遇到共享

看到了吧,"多線程"絕不是在編程這個(gè)層面很難, 多線程本身就很難 。

尤其是當(dāng)多線程遇上共享數(shù)據(jù)時(shí)更是難上加難,對(duì)人類來說,同時(shí)做兩件互不干擾的事情還是有可能的,一邊寫代碼一邊聽歌就是,但你可以試試讓兩個(gè)任務(wù)共享聽的能力,同時(shí)聽兩首歌;或者讓兩個(gè)任務(wù)共享大腦的思考能力,一邊解bug一邊刷算法,你還能輕松加愉快嗎?

如果你試圖推演多線程訪問共享數(shù)據(jù)那么你的腦海很可能就像剛才提到的“一邊接待同學(xué)一邊指揮這維修師傅一邊排查問題一邊做早飯”,一團(tuán)糟。。人類的大腦似乎天生就不是很擅長(zhǎng)(天才不在此討論范圍),更不用說因解決共享數(shù)據(jù)而帶來的死鎖等問題。

遇事不決量子力學(xué)

你的多線程代碼可能在99.99%的情況下工作正常,但在小概率下就是會(huì)有問題,這都不算啥,問題是你該怎么debug呢?

你該怎么調(diào)試一個(gè)可能只有萬分之一出錯(cuò)的程序呢?而且更棒的是,就像測(cè)不準(zhǔn)原理一樣,測(cè)量這操作本身竟然不可避免的攪擾了被測(cè)量粒子的運(yùn)動(dòng)狀態(tài),因此產(chǎn)生不確定性。

當(dāng)你試圖用調(diào)試器attach上去又或者加一些log時(shí)這本身也會(huì)改變多線程程序的行為,或者問題就此不再產(chǎn)生,又或者概率變?yōu)榱耸f分之一,從這個(gè)角度看多線程和量子力學(xué)有異曲同工之妙

這里的根源在于“ 可能性的組合爆炸 ”問題。

由于操作系統(tǒng)的調(diào)度、系統(tǒng)中斷再加上程序員添加的鎖等原因,我們的程序(線程)總是走走停停,這就導(dǎo)致在程序的“執(zhí)行空間”上有太多可能,試圖去測(cè)試每一種可能幾乎是不可能的事情,而我們添加一些log等本身就給本來已經(jīng)爆炸的組合新增一個(gè)維度,導(dǎo)致有的問題非常難復(fù)現(xiàn)。

盡管我們的調(diào)試工具IDE等越來越高級(jí),但依然解決不了多線程本身的問題。

性能是個(gè)問題

如果你不關(guān)心程序性能的話,大可以加上一個(gè)很豪邁的鎖,但鎖也不應(yīng)該加的過分放飛自我,你能想象為了讓北京的某個(gè)同學(xué)買一本書電商要把整個(gè)華北地區(qū)的庫(kù)存鎖住嗎?

如果你關(guān)心性能的話那么鎖的粒度會(huì)是個(gè)問題,同時(shí)在硬件級(jí)別你可能需要了解多核cache一致性以及memory ordering等,這些都不是那么容易理解,更不用提無鎖編程,lock-free等等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6754

    瀏覽量

    88611
  • 多線程編程
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    6679
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    labview多線程編程

    子曰:何為labview多線程編程?
    發(fā)表于 03-11 15:46

    如何對(duì)Linux系統(tǒng)多線程進(jìn)行編程

    Linux系統(tǒng)編程第07期:多線程編程入門 6年嵌入式開發(fā)經(jīng)驗(yàn),在多家半導(dǎo)體...
    發(fā)表于 12-23 08:08

    C++面向?qū)ο?b class='flag-5'>多線程編程 (pdf電子版)

    C++面向?qū)ο?b class='flag-5'>多線程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    QNX環(huán)境下多線程編程

    介紹了QNX 實(shí)時(shí)操作系統(tǒng)和多線程編程技術(shù),包括線程間同步的方法、多線程程序的分析步驟、線程基本程序結(jié)構(gòu)以及實(shí)用編譯方法。QNX 是由加拿大
    發(fā)表于 08-12 17:37 ?30次下載

    linux多線程編程課件

    電子發(fā)燒友為您提供了linux多線程編程課件,希望對(duì)您學(xué)習(xí) linux 有所幫助。部分內(nèi)容如下: *1、多線程模型在單處理器模型和多處理器系統(tǒng)上,都能改善響應(yīng)時(shí)間和吞吐量。 *2、線程
    發(fā)表于 07-10 11:58 ?0次下載

    linux多線程編程開發(fā)

    本文中我們針對(duì) Linux 上多線程編程的主要特性總結(jié)出 5 條經(jīng)驗(yàn),用以改善 Linux 多線程編程的習(xí)慣和避免其中的開發(fā)陷阱。在本文中,我們穿插一些 Windows 的
    發(fā)表于 12-26 14:24 ?55次下載
    linux<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>開發(fā)

    MFC下的多線程編程

    計(jì)算機(jī)上的上位機(jī)制作工具語(yǔ)言之MFC下的多線程編程
    發(fā)表于 09-01 14:55 ?0次下載

    VC-MFC多線程編程詳解

    VC編程中關(guān)于 MFC多線程編程的詳解文檔
    發(fā)表于 09-01 15:01 ?0次下載

    Windows多線程編程

    計(jì)算機(jī)上的上位機(jī)制作工具語(yǔ)言之Windows多線程編程,感興趣的可以看看。
    發(fā)表于 09-01 15:27 ?0次下載

    linux多線程編程技術(shù)

    (process)中只允許有一個(gè)線程,這樣多線程就意味著多進(jìn)程?,F(xiàn)在,多線程技術(shù)已經(jīng)被許多操作系統(tǒng)所支持,包括Windows/NT,當(dāng)然,也包括Linux。 為什么有了進(jìn)程的概念后,還要再引入
    發(fā)表于 10-24 16:01 ?5次下載

    多線程好還是單線程好?單線程多線程的區(qū)別 優(yōu)缺點(diǎn)分析

    摘要:如今單線程多線程已經(jīng)得到普遍運(yùn)用,那么到底多線程好還是單線程好呢?單線程多線程的區(qū)別又
    發(fā)表于 12-08 09:33 ?8.1w次閱讀

    什么是多線程編程?多線程編程基礎(chǔ)知識(shí)

    摘要:多線程編程是現(xiàn)代軟件技術(shù)中很重要的一個(gè)環(huán)節(jié)。要弄懂多線程,這就要牽涉到多進(jìn)程。本文主要以多線程編程以及
    發(fā)表于 12-08 16:30 ?1.2w次閱讀

    Linux下的多線程編程

    線程?使用多線程到底有哪些好處?什么的系統(tǒng)應(yīng)該選用多線程?我們首先必須回答這些問題?! ∈褂?b class='flag-5'>多線程的理由之一是和進(jìn)程相比,它是一種非常"節(jié)
    發(fā)表于 04-02 14:43 ?578次閱讀

    多線程編程指南的PDF電子書免費(fèi)下載

    多線程編程指南》介紹了 SolarisTM 操作系統(tǒng) (Solaris Operating System, Solaris OS)中 POSIX?線程和 Solaris 線程
    發(fā)表于 06-11 08:00 ?4次下載
    <b class='flag-5'>多線程</b><b class='flag-5'>編程</b>指南的PDF電子書免費(fèi)下載

    mfc多線程編程實(shí)例

    (圖形用戶界面)應(yīng)用程序的開發(fā)。在這篇文章中,我們將重點(diǎn)介紹MFC中的多線程編程。 多線程編程在軟件開發(fā)中非常重要,它可以實(shí)現(xiàn)程序的并發(fā)執(zhí)行,提高程序的效率和響應(yīng)速度。MFC提供了豐富
    的頭像 發(fā)表于 12-01 14:29 ?1293次閱讀