當前位置:首頁 > 芯聞號 > 充電吧
[導讀]高并發(fā)編程里多線程(進程)的弊端其實從著名的 C10K 問題的時候, 就談到了高并發(fā)編程時, 采用多線程(或進程)是一種不可取的解決方案, 核心原因是因為線程(或進程)本質(zhì)上都是操作系統(tǒng)的資源, 每個

高并發(fā)編程里多線程(進程)的弊端
其實從著名的 C10K 問題的時候, 就談到了高并發(fā)編程時, 采用多線程(或進程)是一種不可取的解決方案, 核心原因是因為線程(或進程)本質(zhì)上都是操作系統(tǒng)的資源, 每個線程需要額外占用1M或者2M的內(nèi)存空間, 所以2G內(nèi)存,能承受的線程數(shù)差不多只能到1k這個量級。
而且線程的調(diào)度由操作系統(tǒng)調(diào)度, 當線程或者進程數(shù)到達一定量級的時候, 據(jù)有人試驗的結果是并發(fā)的線程數(shù)到達1k以上后, 操作系統(tǒng)基本上就已經(jīng)不堪重負,調(diào)度不過來了。
事件驅(qū)動
已知多線程已經(jīng)無法解決高并發(fā)問題, 所以才有了異步IO,事件驅(qū)動等概念來解決高并發(fā)編程。 很典型的就是 Node.js ,傳說中的事件驅(qū)動, 其實就是在底層使用了 libuv 然后通過各種回調(diào)函數(shù)來注冊事件, 當事件觸發(fā)的時候回調(diào)函數(shù)也被觸發(fā)。 使用事件驅(qū)動的方式確實能解決高并發(fā)的問題, 但是因為事件驅(qū)動最費勁的就是各種喪心病狂不停的回調(diào), 在回調(diào)里面再嵌套回調(diào),容易陷入所謂的【回調(diào)地獄】。 這也是 Node.js 最受人詬病的地方。
高并發(fā)解決方案之協(xié)程
面向?qū)ο笞畹湫偷恼Z言是 Java , 事件驅(qū)動最典型的語言是 Node.js , 協(xié)程最典型的語言就是 golang , 當然國內(nèi)程序員響馬的 fibjs 也是基于協(xié)程來進行并發(fā)的, 也非常出色,只不過在生態(tài)上還是發(fā)展的太慢了。 個人看來協(xié)程相對于事件驅(qū)動是一種更先進的高并發(fā)解決方案, 把復雜的邏輯和異步都封裝在底層, 讓程序員在編程時感覺不到異步的存在, 用響馬的話就是【用同步抒寫異步情懷】。 個人很看好協(xié)程的發(fā)展, 同時也非??春?golang 的前景,

協(xié)程也叫用戶級線程, 很多人分不清楚協(xié)程和線程和進程的關系。 簡單的說就是: 線程和進程的調(diào)度是由操作系統(tǒng)來調(diào)控, 而協(xié)程的調(diào)度由用戶自己調(diào)控。 所以協(xié)程調(diào)度器可以在協(xié)程A即將進入阻塞IO操作, 比如 socket 的 read (其實已經(jīng)設置為異步IO )之前, 將該協(xié)程掛起,把當前的棧信息 StackA 保存下來, 然后切換到協(xié)程B, 等到協(xié)程A的該 IO操作返回時, 再根據(jù) StackA 切回到之前的協(xié)程A當時的狀態(tài)。

小結

協(xié)程誕生解決的是低速IO和高速的CPU的協(xié)調(diào)問題,解決這類問題主要有三個有效途徑:

1.異步非阻塞網(wǎng)絡編程(libevent、libev、redis、Nginx、memcached這類)

2.協(xié)程(golang、gevent)

3.“輕量級線程”,相當于是在語言層面做抽象(Erlang)

對比之下協(xié)程的編程難度較低,不要求編程人員要有那么高的抽象思維能力。再加上golang在這方面優(yōu)秀的實踐,協(xié)程目前的前途還是一片光明的。當然還有一點,我們要承認無論你狀態(tài)機、callback設計得多么精妙,現(xiàn)實中阻塞事很難以避免的。

避免了Network IO Blocking,還有數(shù)據(jù)庫Blocking,
還有Disk IO Blocking,還有數(shù)據(jù)庫Blocking,還有日志Blocking,還有第三方庫blocking,還有人類自己導致的blocking……協(xié)程是應對這些的不錯的解決方案,當然協(xié)程的接口還是太過晦澀。So,Life is Short,Use Golang。線程還是更適合作為多核計算的不二法門存在的。

原文鏈接:https://studygolang.com/articles/2396

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉