什麼是 WPS?它是如何工作的?
通過此詳細教程了解 WPS 的全部內容,學習如何簡單安全地連接無線網絡。
從歷史上看,所有計算機程序都是以完全順序的方式編寫的。這很容易讀、寫和理解。計算機執行起來也很簡單,並且需要相對簡單的硬件。使用這種設計範例,提高系統性能的唯一方法是編寫更高效的代碼和提高 CPU 速度。提高代碼效率是可能的,但它通常是一個複雜的過程,結果往往有限。
幾十年來,等待新的、更高效的 CPU 可能會降低性能。正如摩爾定律所描述的那樣,CPU 的性能大約每兩到三年翻一番。不幸的是,這些性能提升大部分來自使用越來越小的製造節點。由於在納米尺度上工作的材料困難,現代技術一直在努力以歷史速度減小節點尺寸。
為了解決這個問題,現代 CPU 架構師選擇向 CPU 添加多個處理器內核。每個處理器內核都可以獨立執行不同的任務。雖然他們不能合併同一個問題,但他們可以同時處理兩個問題。這種基本的架構變化提供了許多額外的性能,但它並沒有直接使單個進程受益,儘管它確實減少了對處理器時間的爭用。
要利用多核 CPU,必須以多線程方式編寫代碼。然後每個線程都可以並發運行,通過可用線程和 CPU 內核的數量來擴展性能優勢。但是,這樣做會遇到一個新的挑戰,即“競爭條件”。
注意:有些任務不能是多線程的,而其他任務可以是大規模多線程的。可能的性能優勢確實取決於正在完成的工作。
競爭條件
多線程軟件可以利用多核。危險潛伏在那些水域中,隨時準備讓沒有經驗的程序員陷入困境。當兩個不同的線程與相同的內存位交互時,可能會出現競爭條件。
一個簡單的例子可能是兩個線程試圖同時檢查和遞增一個變量。假設a=0。然後兩個不同的線程執行它們的功能,並在某個時候檢查a並將其遞增 1。通常,您希望兩個線程將 1 加 0 的結果是 2。大多數時候,情況應該如此。如果兩個線程恰好在正確的時間執行該特定功能,您會得到不同的結果。
在這種情況下,第一個線程讀取a的值。在第一個線程可以增加though的值之前,第二個線程讀取它。現在第一個線程將 1 加 0,但第二個線程已經認為該值為 0,因此將 1 加 0。這樣做的結果是a的最終值為1,而不是 2。
奔向最壞的情況
雖然上面的例子聽起來可能不是特別糟糕,但它可以產生戲劇性的效果。如果a的值選擇機器的運行模式怎麼辦?如果該機器的特定操作模式可能是危險的甚至危及生命怎麼辦?
競爭條件也不需要那麼簡單。例如,一個線程可以在另一個線程寫入內存部分的同時讀取它。在這種情況下,讀取線程可能會從之前和之後獲得奇怪的數據混合。假設該檢查是一個簡單的真/假檢查。
如果變量在讀取開始時為 true,但正在被覆蓋為 false,則讀取操作的結果可能類似於“trlse”。這不是“真”或“假”。不是二元選擇中的兩個選項中的任何一個幾乎肯定會導致應用程序崩潰。這種內存損壞會導致許多安全問題,例如拒絕服務和特權升級。
鎖定比賽
了解程序中的哪些內存位在不同線程之間共享對於防止競爭條件至關重要。如果變量僅由單個線程控制和訪問,則無需執行任何操作。如果兩個或多個線程可以訪問一個變量,那麼您必須確保對該內存塊的所有操作都是獨立完成的。
這種獨立性是通過鎖實現的。在程序代碼中,您需要在編寫對共享內存塊進行操作的函數時加鎖。這個鎖會阻止其他線程訪問那塊內存,直到鎖被釋放。
鎖不是最優雅的解決方案。一方面,它有內存開銷。它還可以強制線程掛起,等待鎖被釋放。視情況而定,鎖可能會在很長時間內不會釋放,或者可能根本不會釋放。在最壞的情況下,解鎖鎖可能取決於另一個阻塞線程中發生的事情,從而導致死鎖。
優化鎖的使用至關重要。您可以控制鎖定的粒度。例如,如果您正在編輯表格中的數據,您可以鎖定整個表格或只鎖定編輯的行。鎖定整個表將是一個粗粒度的鎖。它最大限度地減少了實施過多鎖的開銷,但增加了另一個線程被鎖阻塞的機會。只鎖定行將是一個細粒度的鎖。這不太可能干擾其他線程,但意味著將需要撕裂鎖,從而增加總開銷。
結論
內存鎖是一種代碼工具,用於確保多線程環境中內存操作的原子性。通過在對其進行操作之前鎖定一塊內存,您可以確保不會因為競爭條件而發生意外行為。內存鎖會帶來內存開銷,但也會導致阻塞。
阻塞是另一個線程試圖對鎖定的 pemory 進行操作的地方。線程坐在那裡,阻塞直到鎖被釋放。如果釋放鎖需要另一個線程做某事,這可能會導致問題,因為它可能會在完成釋放阻塞它的鎖的先決條件之前被阻塞。可以通過編寫非阻塞代碼來避免內存鎖。然而,這樣做可能比使用鎖更複雜且性能更低。不要忘記在下面留下您的評論。
通過此詳細教程了解 WPS 的全部內容,學習如何簡單安全地連接無線網絡。
了解如何使用LinkedIn的私人模式,防止其他人知道您查看了他們的個人資料。這裡有不同的解決方案,以確保您的隱私。
查看如何使用 Google Pixel Watch 來跟踪您的睡眠質量;另請參閱如何訪問收集到的信息。
如果您不確定是否為您的三星手機購買 AirPods,本指南當然可以提供幫助,涵蓋三星手機與 AirPods 的兼容性及使用方法。
在 Pioneer DEH-1700 汽車音響上設置時間的詳細步驟和提示,讓您的音響系統更便捷。
了解如何將游戲手柄無縫連接到Oculus Quest 2,提升您的遊戲體驗。
探索如何使用三星 Flow 將您的智能手機和平板電腦連接到 Windows PC,享受無縫的文件共享與通知同步。
SLI 或 Scalable Link Interface 是一種 Nvidia 技術,允許多個顯卡協同作業以提升性能。了解 SLI 的優缺點及最佳配置方法。
要修復三星 Galaxy Watch 上的“始終顯示”問題,請禁用省電模式並清除 Galaxy Wearable 應用程序緩存。我們提供了詳細的故障排除步驟。
在 Galaxy S21 Plus 上像忍者一樣拍攝照片並關閉快門聲。了解如何使用簡單的步驟來悄悄拍照。