CPU是海王?聊聊 主/子線程 和 同/非同步 的關係

来源:https://www.cnblogs.com/osmondwang/archive/2022/03/19/16027084.html
-Advertisement-
Play Games

最近表弟一直在找實習,經常會問我一些問題,有些問題在沒有經歷過真實工作時是真的不好理解的,所以我開了這個【表弟專欄】,專門為找工作的表弟解決一些疑惑。 這篇文章從電腦發展的角度出發,描述為什麼電腦需要劃分 "主/子線程" 和 "同/非同步",希望這個故事你能喜歡。 開天闢地,電腦"老計"誕生 話 ...


最近表弟一直在找实习,经常会问我一些问题,有些问题在没有经历过真实工作时是真的不好理解的,所以我开了这个【表弟专栏】,专门为找工作的表弟解决一些疑惑。

这篇文章从计算机发展的角度出发,描述为什么计算机需要划分 "主/子线程" 和 "同/异步",希望这个故事你能喜欢。

开天辟地,计算机"老计"诞生

话说几十年前,老计(初代CPU)诞生了,老计诞生初期帮人们解决了诸多繁琐的计算工作,他可以无休无止地按照人们给的指令进行运算。

就像图中一样,人们产生着各种问题,然后把问题丢入到一个队列中去,老计按照人们丢入的指令按顺序进行计算。

但就像现在互联网越来越卷一样,老计工作几年之后,发现要做的事情实在是太多了,有些计算要算完要搞到几十年后了,这可咋办呢?

这时人们认为老计该退休了,换了大计出场,大计的优点是相当卷,计算速度是老计的N倍,大大提升了计算的速度。

现实问题,大计海王进化(主/子线程)

大计有一天在诚诚恳恳工作时,被主管拉到了办公室,开始批评大计:

"大计啊,我知道你工作起来很努力,但你有点死板了啊,所有人给你分配的工作你都是按顺序操作,导致用户说我们的产品就像在挤牙膏,一点点挤出来。你能再加快工作速度吗?不能只靠加班来完成工作啊!"

大计一脸mmp像,心想:“我特么要做什么,不还是你给到的指令啊”,但大计有着当代互联网人共同的目标("保住这份工"),所以大计也只能说:

"好的主管,这事我想想办法,明天给你个答复。"

大计这天工作到凌晨3点,下班后和总线一起去喝酒,说起了白天被主管叼这件事,总线说:

"这事好办啊,我平时给你传的各种指令,优先级不高的你让它不要走同一条路径传输呀,我们像渣男一样搞个高并发!给每个指令都送去温暖,钓住她们,让她们以为你是专一的男人,实际上你在同时和多人交往。"

大计一听直呼妙计妙计,总线不愧是和各个部门打交道的社交花,把泡妞能力用到工作上直接无缝衔接。

之前大计只有一条指令流水线时,他是按走流程,指令1处理完了,才处理指令2,是一个对指令专一的男子。

大计当即画出了这样的指令图:

大计现在能"同时"处理 3条指令:M_0、A_0和B_0,说是"同时",实际上只是大计在这三条指令里频繁切换,M_0完成40%,就去招呼下A_0,A_0处理完80%后,然后再去招呼下B_0指令。

也就是说虽然工作时长是一定的,但给主管一种同时在处理3个指令的错觉。就靠着这套海王策略,大计终于完成了刁钻主管的需求。

不急的话,这事可以等等再做(同/异步)

随着大计海王能力的扩展,现在最高时可以"同时"和几百个指令妹子约会,已经是不可被替代的重要角色,现在主管每天看到大计都得磕个头,大计的话语权也越来越大,甚至开始反过来给主管提需求了:

"主管啊,你可要知道我主线程是负责和用户交互的重要线程啊,你每天在主线程丢那么指令,非常影响用户的体验了啊"

"你有些渲染UI的逻辑太频繁了,导致我做了很多无用的渲染,而且渲染逻辑也分重要程度啊,不重要的指令你等我空闲了再处理啊"

主管连连点头,说好的好的:"我们下次添加指令时,会告诉你这个指令是否需要立刻实施,如果不那么重要可以等你空闲下来再处理。"

于是乎,同步、异步 的概念诞生了:

之前大计在处理 主线程 里的指令时,因为同一个线程指令是没有优先级的概念的,所以 线程里的指令还是按顺序处理的:M_0 -> M_1 -> M_2 -> M_3 -> M_4

但有了 异步 的概念后,假设这里的 指令M_1 不那么重要,那么大计在处理时是可以把 M_1 放到后面处理的:M_0 -> M_2 -> M_3 -> M_4 -> M_1

小结

本篇【表弟专栏】给大家聊了 主/子线程 诞生的必要性,描述了CPU海王本质,以及和同/异步的区别和关联。关于 主/子线程 和 同/异步 的问题,大家可以在评论区一起讨论。最后如果大家喜欢这个专题,可以关注我的公众号:冰以东,会持续更新【表弟专栏】,希望能帮忙大家找到更好的工作。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 想獲取一首歌的伴奏卻找不到資源怎麼辦?沒關係,我們可以自己解決。音頻編輯服務提供音源分離的功能,幫助開發者在應用中構建人聲與伴奏分離的功能。 目前,音源分離功能已經開放了人聲與伴奏、樂器等多種分離的方式,可以實時解析並將樂器中的人聲和各種樂器元素提取到獨立的音軌上,滿足創作者對伴奏製作、扒帶、音樂創 ...
  • 一、安裝flutter環境 1、下載Flutter sdk包,地址:https://flutter.dev/docs/get-started/install/windows 2、將壓縮包解壓到任意文件夾 3、將flutter命令文件添加到環境變數中 4、在Android Studio中下載Flutt ...
  • Android跨進程要掌握的是Binder, 而同一進程中最重要的應該就是Handler 消息通信機制了。我這麼說,大家不知道是否認同,如果認同,還希望能給一個關註哈。 什麼是Handler? Handler主要用於非同步消息的處理:當發出一個消息之後,首先進入一個消息隊列,發送消息的[函數]即刻返回 ...
  • Google Analytics: Universal Analytics增強型電子商務,可以讓運營人員輕鬆地跟蹤用戶在其購物歷程中與產品的互動,包括產品展示、產品點擊、查看產品詳情、將產品添加到購物車、結賬流程、交易以及退款等操作。 目前,Google Analytics: Uniersal An ...
  • 如果我們需要設置一個view在另一個view的右邊緣距離一定距離的地方,利用Masonry這麼寫: offset可以讓我們在設置視圖之間相對位置時起到很大作用,但是也有很多情況下用不到,比如size、center等等,而調查Maronry的底層方法,可以看到和offset類似的方法還有很多: off ...
  • RGB、YUV、HSV和HSL區別和關聯 近期在做的一個需求和顏色轉換有關係,所以本篇將開發過程中比較常見的 四種顏色 進行一番梳理。 一、RGB顏色空間 從我們最常見的RGB顏色出發,RGB分別對應著 Red(紅)、Green(綠)、Blue(藍),也就是我們平時所說的三原色,調整這三種顏色的比例 ...
  • 現在的SIM卡通常具備基站定位、語音通話、簡訊消息、網路流量這四大功能,而在移動端是無法對SIM卡使用基站定位功能的,所以這裡只介紹移動端如何使用SIM卡實現語音通話、簡訊消息、數據流量三個功能。 ##語音通話 Android系統中提供了通話服務,同時自帶系統級應用可以通過該通話服務使用SIM卡的通 ...
  • Android 12(API 31)於2021年10月4日正式發佈,正式版源代碼也於當日被推送到AOSP Android開源項目。截止到筆者撰寫這篇文章時,國內各終端廠商的在售Android設備,已經逐步開啟了Android 12正式版本的更新。當前,對於Android應用開發者來說,Android... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...