新聞中心
[[76725]]

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),土默特左旗企業(yè)網(wǎng)站建設(shè),土默特左旗品牌網(wǎng)站建設(shè),網(wǎng)站定制,土默特左旗網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,土默特左旗網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
今天聊一聊電腦和人腦的并發(fā)問(wèn)題。
在計(jì)算機(jī)發(fā)展初期,CPU的計(jì)算能力非常有限,計(jì)算資源稀缺而昂貴。最早的時(shí)候一個(gè)CPU只能同時(shí)運(yùn)行一個(gè)任務(wù),這簡(jiǎn)直讓人無(wú)法忍受。什么叫做只能運(yùn)行一個(gè)程序呢?這就像大學(xué)上自習(xí)占座一樣,一旦一本書(shū)、一張紙、一個(gè)包或一個(gè)活人占有了那個(gè)桌子,其他人就再也沒(méi)法用了,無(wú)論是這個(gè)人出去上廁所,踢球,你都不能去用那個(gè)座位,如果你賊膽包天敢偷著去坐,這時(shí)候就會(huì)有個(gè)神秘人突然拍拍你的肩膀告訴你「童靴,這里有人」,這就是常說(shuō)的「見(jiàn)鬼的故事」。故事里的座位就是CPU,無(wú)論當(dāng)前任務(wù)在使用CPU進(jìn)行計(jì)算,還是在讀寫(xiě)磁盤(pán)IO或進(jìn)行網(wǎng)絡(luò)交互,丫都得占著CPU,黑客極客和各種無(wú)證程序員們覺(jué)得,這,不,科,學(xué)!
于是大家試圖通過(guò)各種方式來(lái)改變這一現(xiàn)象。首先出場(chǎng)的是多通道程序,程序員們很快寫(xiě)了一個(gè)監(jiān)控程序,發(fā)現(xiàn)當(dāng)前任務(wù)不用CPU計(jì)算時(shí),就喚醒其他等待 CPU資源的程序,讓CPU資源能夠得到充分利用。但多通道的問(wèn)題是調(diào)度乏力,不分青紅皂白和輕重緩急,不管是急診還是普通門(mén)診,該等都得等。
第二出場(chǎng)的是分時(shí)系統(tǒng),分時(shí)系統(tǒng)是一種協(xié)作模式,每個(gè)程序運(yùn)行一小段時(shí)間都得主動(dòng)把CPU讓出來(lái)給其他程序,這樣每個(gè)程序都有機(jī)會(huì)用到CPU一小段時(shí)間。這時(shí)操作系統(tǒng)的監(jiān)控程序也完善了一些,能夠處理相對(duì)復(fù)雜的請(qǐng)求。早期的Windows和Mac OS(注意沒(méi)有X)都是采用這種方式來(lái)調(diào)度程序的。分時(shí)系統(tǒng)的問(wèn)題是,一旦某個(gè)程序死循環(huán),系統(tǒng)就沒(méi)招了,只能干等著,就像死機(jī)了一模一樣,程序員們說(shuō),這是不可接受的!
第三個(gè)隆重登場(chǎng)的是多任務(wù)系統(tǒng),程序員們讓操作系統(tǒng)接管了所有的硬件資源,變得更加高級(jí)智能,系統(tǒng)進(jìn)程開(kāi)始分級(jí),有的是特權(quán)級(jí)別,有的是平民級(jí)別(你就知道,在計(jì)算機(jī)世界都特么是這個(gè)樣子?。械膽?yīng)用程序以進(jìn)程和線程方式運(yùn)行,CPU的分配方式采用了搶占式,就是說(shuō)操作系統(tǒng)可以強(qiáng)制把CPU的資源分配給目前最需要的程序。程序員們成功了,幾乎完美的控制了一切,并造成了很多任務(wù)都在同時(shí)運(yùn)行的假象,如果用兩個(gè)字來(lái)形容的話,那就是「和諧」!目前OS X、Unix、Linux、Windows都是采用這種方式進(jìn)行任務(wù)管理的。
以上都是單核單CPU的情況,但無(wú)論線程間的切換多么快,這些都是并發(fā),而不是并行。
好吧,中間插播一段并發(fā)和并行的區(qū)別。并發(fā)的英文單詞是Concurrency,并行是Parallelism。如果一個(gè)系統(tǒng)支持兩個(gè)或多個(gè)動(dòng)作(Action)同時(shí)存在,那就是一個(gè)并發(fā)系統(tǒng)。如果一個(gè)系統(tǒng)支持兩個(gè)或多個(gè)動(dòng)作同時(shí)執(zhí)行,那就是一個(gè)并行系統(tǒng)。也就是說(shuō),單個(gè)CPU永遠(yuǎn)無(wú)法同時(shí)執(zhí)行兩個(gè)或以上的任務(wù),但是允許任務(wù)同時(shí)存在。所以,只有多核或多個(gè)CPU才可能發(fā)生并行,如果單核單CPU只能發(fā)生并發(fā)行為。
如果有人以為單核單CPU的并發(fā)就是同時(shí)執(zhí)行很多任務(wù),那么這是個(gè)錯(cuò)覺(jué)。
不知道解釋清楚了木有。插播完畢!
終于,多核CPU和分布式系統(tǒng)被干出來(lái)了,一臺(tái)計(jì)算機(jī)可以擁有多顆CPU,每顆CPU可以有多核,同時(shí),成千上萬(wàn)臺(tái)的機(jī)器被連接在一起進(jìn)行計(jì)算,大家一看都暈了,史稱「云計(jì)算」。隨著硬件的變化,軟件技術(shù)同時(shí)開(kāi)始革新,各種語(yǔ)言開(kāi)始支持并行計(jì)算,比如Erlang/Scala的 Actor&Message模型,Go語(yǔ)言的goroutine機(jī)制,Java的ForkJoinPool,Objective-C的Grand Central Dispatch技術(shù),當(dāng)然還有Hadoop等分布式框架。
總之,到了目前這個(gè)階段,無(wú)論是并發(fā),還是并行,計(jì)算機(jī)和CPU都算是解放了,它們不僅在單臺(tái)機(jī)器上可以執(zhí)行并行計(jì)算,在橫向擴(kuò)展上也變得隨心所欲,各種云平臺(tái)應(yīng)運(yùn)而生,公有云私有云混合云balabala,反正是比較暈……
人腦就比較慘了,在電腦突飛猛進(jìn)的這幾十年里,幾乎沒(méi)有任何進(jìn)展,腦袋仍然只有一個(gè),也沒(méi)有裂變出多核……
上文書(shū)談了電腦的并發(fā)和并行的事情,有讀者反饋,像一個(gè)有趣的教科書(shū)!我特么最煩教科書(shū),就因?yàn)榻炭茣?shū),哥寫(xiě)了幾年程序才把這些事捋清楚,為了讓你們不再重蹈覆轍,我容易嗎我!
好,下面我們談一下人腦的并發(fā),先看一個(gè)讀者反饋,你們感受一下:
?看過(guò)一個(gè)關(guān)于人腦的理論,說(shuō)不清是并發(fā)還是異步。有時(shí)候我們很努力的想一個(gè)問(wèn)題,但卻怎么也想不起來(lái),于是我們放棄了。但是大腦并沒(méi)有放棄,此時(shí)它會(huì)自動(dòng) 起一個(gè)gorouting,繼續(xù)再大腦的各個(gè)角落去尋找這個(gè)記憶碎片,當(dāng)找到時(shí)執(zhí)行回調(diào)告訴你。而此時(shí)你可能正邊洗澡邊哼著小曲兒!
關(guān)于人腦的機(jī)制,其復(fù)雜程度超過(guò)CPU何止萬(wàn)倍,比如上古奇人周伯通郭靖小龍女的雙手互搏到底是并發(fā)還是并行呢,Mac君萬(wàn)不敢斷言,未來(lái)還是讓研究人腦圖譜的人去探索其真正的奧秘吧。我們?cè)谶@篇文章中把「一心二用」或「一心多用」統(tǒng)稱為人腦的并發(fā)。
俗話說(shuō)「一心不能二用」,這句話常常送給那些做事三心二意的人,但是我們真的不能一心多用嗎?或者說(shuō)并發(fā)帶給我們的到底是效率的提升還是狀態(tài)的下降?關(guān)于這件事Mac君的看法是,不可一概而論。「好吧,那位同學(xué)請(qǐng)把磚頭繼續(xù)放入懷中,我們還沒(méi)有講完」。
關(guān)于人腦的多任務(wù)處理,應(yīng)該從個(gè)人特點(diǎn)、所處環(huán)境和任務(wù)特性來(lái)考慮。
其實(shí)人腦天生就是用來(lái)處理多任務(wù)的,比如你可以一邊洗澡一邊唱歌,一邊看電影一邊磕瓜子還要注意不要被飛來(lái)的磚頭砸到等等,不過(guò)這樣的多任務(wù)都是在放松環(huán)境下的簡(jiǎn)單任務(wù),對(duì)我們提升效率沒(méi)什么意義。
但是,當(dāng)我們?cè)诮∩矸颗懿綍r(shí)聽(tīng)英語(yǔ),寫(xiě)文章或編碼的時(shí)候聽(tīng)歌(所有不讓聽(tīng)音樂(lè)編程的公司都將死于心碎),坐地鐵的時(shí)候閱讀,步行的時(shí)候思考,這就變得非常有意義的,因?yàn)槲覀冊(cè)谝粋€(gè)相對(duì)寬松的環(huán)境下把復(fù)雜的邏輯任務(wù)和簡(jiǎn)單的機(jī)械任務(wù)結(jié)合在一起,既不影響A,也不會(huì)干擾B,這種情況是我們優(yōu)先要采取的并發(fā)策略。
類似的事情,比如開(kāi)車時(shí)聽(tīng)英語(yǔ),就要因人而異了。我有近10年的駕駛經(jīng)驗(yàn),喜歡開(kāi)車,駕駛基本上已經(jīng)形成下意識(shí)的動(dòng)作,從出發(fā)到目的地往往不會(huì)記得自己做了哪些操作,所以我經(jīng)常開(kāi)車時(shí)聽(tīng)英語(yǔ)并有所收獲。但有些人開(kāi)車僅僅是駕駛已經(jīng)夠緊張忙亂了,倒一次車能車頭入絕不車尾進(jìn),開(kāi)次長(zhǎng)途出的汗夠洗澡的,那么就專心開(kāi)車好了,車內(nèi)最好保持安靜或聽(tīng)一些舒緩的音樂(lè)。
我曾經(jīng)看過(guò)一本叫做《錯(cuò)覺(jué)》的書(shū),書(shū)中有一段描述了一位機(jī)長(zhǎng)在飛機(jī)飛行的過(guò)程中發(fā)現(xiàn)機(jī)上設(shè)備出了點(diǎn)小故障,于是他和副機(jī)長(zhǎng)一起排查,接著又找來(lái)機(jī)械師,哥三忙的不亦樂(lè)乎,過(guò)了一段時(shí)間,有人問(wèn),誰(shuí)在開(kāi)飛機(jī)呢?這時(shí)飛機(jī)無(wú)人駕駛已經(jīng)很久了,等反應(yīng)過(guò)來(lái)之后,飛機(jī)已經(jīng)開(kāi)始俯沖墜地,機(jī)上人員全部罹難!這種空難并不是意外,一架狀況良好的飛機(jī)直接撞向地面不是偶爾發(fā)生,這種現(xiàn)象在航空領(lǐng)域被稱作「可控飛行撞地」,其根本原因就是,人們太相信自己的多任務(wù)處理能力!
駕車雖然比駕駛飛機(jī)簡(jiǎn)單多了,但同樣是一項(xiàng)非常危險(xiǎn)的工作,所以我建議大家,聽(tīng)聽(tīng)音樂(lè)就好,另外千萬(wàn)別玩手機(jī)。
還有一種情況就是,在同一時(shí)間做兩項(xiàng)或多項(xiàng)復(fù)雜任務(wù),比如你讓程序員在編碼的同時(shí)幫助別人解決問(wèn)題,能不能做好?也許有人可以,但我的感覺(jué)是,這種安排效率反而會(huì)打折扣。 人們?cè)诤芏鄷r(shí)候會(huì)低估自己的能力,但在更多時(shí)候會(huì)高估自己。在復(fù)雜任務(wù)并發(fā)處理的時(shí)候,人腦往往會(huì)高估自己的處理能力,以為可以,其實(shí)任務(wù)的并行,上下文的切換,注意力的分散,都會(huì)讓你的效率大打折扣,所以設(shè)計(jì)模式中的職責(zé)單一原則不是蓋的,一個(gè)類盡可能只做一件事情,無(wú)論是效率還是后期維護(hù)都會(huì)好很多,人腦其實(shí)也是一樣。
總結(jié)一下: 1、簡(jiǎn)單任務(wù)的并發(fā)是大腦天生的nature,每個(gè)人都不在不自覺(jué)的應(yīng)用。 2、在寬松的環(huán)境中讓簡(jiǎn)單機(jī)械的任務(wù)和復(fù)雜有機(jī)的任務(wù)并行完成是非常不錯(cuò)的做法,提高效率節(jié)省時(shí)間。 3、在高危環(huán)境中(駕駛、高空作業(yè)等等)我們應(yīng)該專心致志的只做當(dāng)前的工作。 4、對(duì)于復(fù)雜任務(wù),我們最好一件一件完成,即使有些人能夠同時(shí)處理多重任務(wù),那也需要長(zhǎng)期的艱苦訓(xùn)練,比如郭靖君,你能否做到,就得看有沒(méi)有周伯通那樣的大哥!
文章題目:開(kāi)發(fā)的錯(cuò)覺(jué)
網(wǎng)頁(yè)鏈接:http://fisionsoft.com.cn/article/cdgdsps.html


咨詢
建站咨詢
