最近表弟一直在找實習,經常會問我一些問題,有些問題在沒有經歷過真實作業時是真的不好理解的,所以我開了這個【表弟專欄】,專門為找作業的表弟解決一些疑惑,
這篇文章從計算機發展的角度出發,描述為什么計算機需要劃分 "主/子執行緒" 和 "同/異步",希望這個故事你能喜歡,
開天辟地,計算機"老計"誕生
話說幾十年前,老計(初代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海王本質,以及和同/異步的區別和關聯,關于 主/子執行緒 和 同/異步 的問題,大家可以在評論區一起討論,最后如果大家喜歡這個專題,可以關注我的公眾號:冰以東,會持續更新【表弟專欄】,希望能幫忙大家找到更好的作業,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/445573.html
標籤:iOS
