AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

面試薪水被壓?那是你還不懂多線程和高并發

來源: 責編: 時間:2023-10-13 14:37:02 237觀看
導讀1.引言大家好,我是小?,一個漂泊江湖多年的 985 非科班程序員,曾混跡于國企、互聯網大廠和創業公司的后臺開發攻城獅。作為開發者,不管是求職面試,還是在日常工作中,相信大家對高并發和多線程都不會陌生。求職面試時,卷出天

1.引言

大家好,我是小?,一個漂泊江湖多年的 985 非科班程序員,曾混跡于國企、互聯網大廠和創業公司的后臺開發攻城獅。Scv28資訊網——每日最新資訊28at.com

作為開發者,不管是求職面試,還是在日常工作中,相信大家對高并發和多線程都不會陌生。Scv28資訊網——每日最新資訊28at.com

求職面試時,卷出天際的后臺招聘要求,往往都會要求我們熟悉高并發、多進程/多線程:Scv28資訊網——每日最新資訊28at.com

圖片圖片Scv28資訊網——每日最新資訊28at.com

日常工作中,隨著移動互聯網應用的興起和發展,我們面對的系統任務和問題也變得越來越復雜。Scv28資訊網——每日最新資訊28at.com

無論是構建大規模的 Web 應用、處理龐大的數據集,還是開發高性能的游戲,都需要應對一個共同的挑戰:高并發。Scv28資訊網——每日最新資訊28at.com

1.1 什么是高并發?

高并發是指在同一時間段內有大量用戶或程序在訪問和使用某個服務或資源。Scv28資訊網——每日最新資訊28at.com

這意味著我們需要在同一時間內處理大量的請求、數據和任務。如何高效地處理這種情況,就成了一項關鍵的技術任務。Scv28資訊網——每日最新資訊28at.com

高并發是一個充滿挑戰的領域,但同時也是一個充滿機會的領域。Scv28資訊網——每日最新資訊28at.com

1.2 多線程和高并發有啥關系?

解決高并發問題不僅能夠提高系統的性能,還能夠改善用戶體驗,為企業帶來更多的商機。Scv28資訊網——每日最新資訊28at.com

而多線程技術,正是應對高并發挑戰的重要工具之一。Scv28資訊網——每日最新資訊28at.com

所以,在本篇文章中,小?將帶大家一起深入探討高并發和多線程,并熟悉多線程的工作原理、應用場景以及解決高并發問題的實際方案。Scv28資訊網——每日最新資訊28at.com

相信無論你是初級程序員還是有一定經驗的開發者,都能夠在這篇文章中找到有用的信息。Scv28資訊網——每日最新資訊28at.com

2. 高并發

2.1 并發與并行

并發

并發是指多個任務在相同的時間段內執行。在單核處理器上,多個線程之間通過時間片輪轉方式切換執行,造成了并發場景。Scv28資訊網——每日最新資訊28at.com

圖片圖片Scv28資訊網——每日最新資訊28at.com

相當于我們的錄像,當視頻幀數夠高時(即一秒內切換多張圖片),我們的肉眼就會把它當成是一個連續而流暢的視頻。Scv28資訊網——每日最新資訊28at.com

并行

在多核處理器上,真正的并發可以實現多個線程同時執行不同的任務——也就是并行。Scv28資訊網——每日最新資訊28at.com

圖片圖片Scv28資訊網——每日最新資訊28at.com

并行是指多個任務在同一時刻執行,通常需要多核處理器。并行是并發的一個子集,只有當硬件支持多個并行執行單元時才能實現真正的并行。Scv28資訊網——每日最新資訊28at.com

思考題

場景1:為什么我們在玩游戲時,很難一邊激烈團戰,一邊集中注意接電話?Scv28資訊網——每日最新資訊28at.com

場景2:我們在開車時,可以一邊聽音樂,一邊撥弄方向盤而互不影響。大家不妨猜一下,我們的大腦是并發還是并行運行的呢?Scv28資訊網——每日最新資訊28at.com

2.2 多高的并發才算高并發?

了解了并發的概念,現在我們來聊一聊高并發。Scv28資訊網——每日最新資訊28at.com

或許和我們平常想象的不同,不是說 QPS(Queries Per Second)每秒查詢率 或 HPS(Hits Per Second)每秒點擊數 等指標很高才算是高并發。Scv28資訊網——每日最新資訊28at.com

高并發是一個相對的概念,它取決于系統的性能和處理能力。通常,當系統需要處理的請求或事務數量超出其正常負載的范圍時,就可以稱之為高并發。Scv28資訊網——每日最新資訊28at.com

2.3 高并發的挑戰

高并發雖然帶來了許多機會,但也伴隨著很多挑戰。Scv28資訊網——每日最新資訊28at.com

比如,高并發系統需要在短時間內處理大量請求,而不降低系統的性能或響應速度。Scv28資訊網——每日最新資訊28at.com

這可能涉及到多個用戶同時訪問一個網站、多個客戶端同時請求服務器數據、或多個線程同時訪問共享資源。Scv28資訊網——每日最新資訊28at.com

在分布式系統中,不管是多個用戶訪問,還是多個客戶端訪問服務器,歸根到底都是各服務器的業務線程來訪問共享資源,所以,高并發的挑戰幾乎都是與多線程相關的。Scv28資訊網——每日最新資訊28at.com

在面對高并發時,具體會出現以下幾個問題。Scv28資訊網——每日最新資訊28at.com

圖片圖片Scv28資訊網——每日最新資訊28at.com

1. 競態條件

多個線程同時訪問共享資源,可能導致數據不一致問題。例如,多個線程同時向同一個銀行賬戶存款,可能導致余額錯誤。Scv28資訊網——每日最新資訊28at.com

2. 死鎖

多個線程相互等待對方釋放資源,導致系統停滯。例如,線程 A 等待線程 B 釋放鎖,而線程 B 又等待線程 A 釋放鎖,就形成了死鎖。Scv28資訊網——每日最新資訊28at.com

3. 資源爭用

多線程訪問共享資源時,可能導致資源爭奪問題,降低性能。例如,多個線程同時競爭數據庫連接,導致數據庫響應變慢。Scv28資訊網——每日最新資訊28at.com

4. 線程安全

需要確保多線程訪問共享數據時不會引發錯誤。例如,在多線程環境下,需要確保對數據的讀寫是安全的。Scv28資訊網——每日最新資訊28at.com

5. 調試難度

由于多線程的執行順序是不確定的,問題可能出現在不同的時機。所以多線程程序的調試相對復雜,問題難以重現。Scv28資訊網——每日最新資訊28at.com

2.4 解決高并發問題

為了解決高并發問題,需要采用適當的技術和方法,具體有以下幾種。Scv28資訊網——每日最新資訊28at.com

圖片圖片Scv28資訊網——每日最新資訊28at.com

1. 鎖機制

使用鎖來保護共享資源,確保同時只有一個線程可以訪問。Scv28資訊網——每日最新資訊28at.com

鎖可以分為互斥鎖和讀寫鎖,互斥鎖用于獨占資源,讀寫鎖允許多個線程同時讀取資源,但只允許一個線程寫入。Scv28資訊網——每日最新資訊28at.com

具體實現細節可以使用編程語言提供的鎖機制,如 Java 中的 synchronized 關鍵字或 Python 中的 threading.Lock。Scv28資訊網——每日最新資訊28at.com

2. 并發數據結構

使用并發數據結構,如并發隊列和哈希表,減少資源爭用。這些數據結構經過優化,能夠在多線程環境下高效工作。Scv28資訊網——每日最新資訊28at.com

例如,Java提供了ConcurrentHashMap,它是一個線程安全的哈希表,可以在高并發環境下使用而無需顯式加鎖。Scv28資訊網——每日最新資訊28at.com

3. 線程池

管理和重用線程,提高性能。線程池可以控制線程的數量,避免線程過多導致資源浪費。Scv28資訊網——每日最新資訊28at.com

在 Java 中,你可以使用ExecutorService來創建和管理線程池。這樣可以避免線程的頻繁創建和銷毀,提高效率。Scv28資訊網——每日最新資訊28at.com

4. 消息傳遞

通過消息傳遞模型進行線程間通信,避免共享內存。消息傳遞可以確保線程之間的數據安全傳遞,減少競態條件。Scv28資訊網——每日最新資訊28at.com

例如,在 Go 語言中,你可以使用通道(channel)進行消息傳遞,確保數據的安全傳遞。Scv28資訊網——每日最新資訊28at.com

5. 原子操作

原子操作是不可分割的操作,它們可以確保多個線程對共享變量的操作是安全的。原子操作通常由第三方庫或者特性支持,可以用于實現各種同步機制。Scv28資訊網——每日最新資訊28at.com

在 C/C++ 中,你可以使用原子操作來操作共享變量,例如使用atomic庫。在 MySQL 中,InnoDB 引擎的事務線程能夠自帶原子性的特點。Scv28資訊網——每日最新資訊28at.com

3. 多線程

3.1 進程與線程

當并發工作中的某一個任務完成后,會從一段程序切換到另一段程序上執行,而上一段程序運行的一系列狀態如果不保存,就會丟失,因此操作系統引入了進程來進行資源隔離。Scv28資訊網——每日最新資訊28at.com

進程

進程是用來劃分程序運行時所需的基本資源單位,它擁有獨立的地址空間,獨立的堆棧,當進程切換時,就可以保證各自的數據存儲不受影響。Scv28資訊網——每日最新資訊28at.com

由于進程涉及到大量資源的消耗,所以由計算機操作系統嚴格管控(可以理解為:每個省市的土地資源審批,都是十分謹慎的,特別是一線城市,所以由核心部門統一管控)。Scv28資訊網——每日最新資訊28at.com

因此,進程的切換都發生在內核態,由計算機核心程序來統一調度。Scv28資訊網——每日最新資訊28at.com

小知識:Scv28資訊網——每日最新資訊28at.com

操作系統分為內核態與用戶態,處于內核態的 CPU(Central Processing Unit,核心處理器)可以訪問任意的數據。Scv28資訊網——每日最新資訊28at.com

包括網卡、硬盤等外圍設備,并且在占用的 CPU 不會發生搶占的情況。Scv28資訊網——每日最新資訊28at.com

而處于用戶態的 CPU 只能受限地訪問內存,不允許訪問外圍設備,用戶態下的 CPU 可能會被其它程序搶占。Scv28資訊網——每日最新資訊28at.com

線程

當進程切換時,由于要切換內核狀態,因此資源消耗比較大,對此又引入了線程的概念。Scv28資訊網——每日最新資訊28at.com

線程是操作系統調度的最小單位,是程序內部的一個執行流程。一個進程可以包含多個線程,它們共享進程的資源,如內存空間和文件句柄,但各自有獨立的棧內存。Scv28資訊網——每日最新資訊28at.com

線程本身幾乎不占用任何資源,它和本進程的其它線程共享地址空間,共享堆,所以調度時耗費比較小,但是它擁有獨立的 CPU 上下文(包括 CPU 寄存器、程序計數器等)。Scv28資訊網——每日最新資訊28at.com

線程好比與同一個進程里面的線程共享同一片土地資源,但是線程有各自的辦公樓,線程之間切換時也是由操作系統統一調度。Scv28資訊網——每日最新資訊28at.com

小知識:線程分為內核態線程與用戶態線程,用戶態線程必須要綁定到內核態線程中,才可運行。Scv28資訊網——每日最新資訊28at.com

3.2 多線程概念

多線程是一種并發執行的方式,它可以讓一個程序分為多個獨立的線程,每個線程可以獨立執行任務。這就好比在一塊土地資源上,可以同時施工而互不影響。Scv28資訊網——每日最新資訊28at.com

創建和管理線程

多線程的創建和管理涉及到操作系統的調度機制,在不同編程語言中有不同的實現方式。我們以 Python 為例:Scv28資訊網——每日最新資訊28at.com

import threadingdef my_function():   # 線程要執行的任務thread = threading.Thread(target=my_function)thread.start()  # 啟動線程

線程同步與互斥

當多個線程同時訪問共享資源時,可能會導致競態條件,即多個線程之間相互競爭資源,可能導致數據不一致。Scv28資訊網——每日最新資訊28at.com

為了解決這個問題,我們使用鎖機制,保證在同一時間只有一個線程可以訪問共享資源。Scv28資訊網——每日最新資訊28at.com

import threadinglock = threading.Lock()def my_function():   lock.acquire()  # 獲取鎖   # 訪問共享資源   lock.release()  # 釋放鎖

3.3 多線程應用

多線程不僅可以提高程序的性能,還可以改善用戶體驗。在現實生活中,我們經常遇到多線程應用的場景。Scv28資訊網——每日最新資訊28at.com

Web服務器

想象一個熱門的社交媒體網站,數百萬用戶同時在不同時間訪問該網站。Scv28資訊網——每日最新資訊28at.com

這些用戶會請求不同的頁面、上傳照片、發表帖子,同時還有一些后臺任務,如數據備份、新帖子推送等。Scv28資訊網——每日最新資訊28at.com

此時,Web 服務器需要同時處理來自多個用戶的請求。每個用戶的請求可以看作一個線程,多線程允許服務器同時響應多個請求。Scv28資訊網——每日最新資訊28at.com

例如,一個用戶可以請求查看自己的個人資料,而另一個用戶可以請求發布新的狀態更新。這兩個請求可以由不同的線程同時處理,提高了服務器的響應速度。Scv28資訊網——每日最新資訊28at.com

數據庫系統

假設一個在線銀行系統,數千名客戶同時訪問其賬戶信息,檢查余額、轉賬等。此外,銀行系統還需要處理客戶的存款和取款操作。Scv28資訊網——每日最新資訊28at.com

此時,數據庫系統需要同時處理多個客戶的請求。每個客戶請求可以看作一個線程,多線程可以同時查詢數據庫,確保每個客戶的賬戶信息都是最新的。Scv28資訊網——每日最新資訊28at.com

游戲交互

一個多人在線游戲,數十名玩家同時參與游戲。這個游戲需要同時處理玩家的操作、物理模擬、AI 計算和多人游戲互動。Scv28資訊網——每日最新資訊28at.com

此時,游戲引擎可以使用多線程來處理不同方面的任務。一個線程可以負責渲染游戲畫面,另一個線程可以處理玩家的操作,還有一個線程可以負責模擬游戲中的物理效果。Scv28資訊網——每日最新資訊28at.com

有了多線程,游戲系統的反饋會更加流暢,玩家也可以享受到高度互動的游戲體驗。Scv28資訊網——每日最新資訊28at.com

4. 總結

當談論多線程和并發,就好像是我們日常生活中的繁忙街頭,每個人都在處理自己的事情,但同時也需要協調與他人的互動。Scv28資訊網——每日最新資訊28at.com

這些不同的活動和任務就好比多線程中的多個線程,它們在同時運行,互相影響,但也需要有效的協調和管理。Scv28資訊網——每日最新資訊28at.com

高并發就像是一個繁忙的咖啡店需要應對顧客一樣,每個員工都在制作不同的咖啡,有人負責濃縮咖啡,有人負責蒸奶,有人負責服務顧客。這些員工就好比不同的線程,它們同時工作,但需要協調好咖啡的制作,以確保每杯咖啡都是完美的。Scv28資訊網——每日最新資訊28at.com

除了應對面試,多線程和高并發也是我們日常生活的縮影,它們讓不同的任務可以同時進行,提高了效率和體驗。但同時也需要良好的協調和管理,以避免混亂和沖突。Scv28資訊網——每日最新資訊28at.com

多線程和高并發是現代計算機科學的一部分,也是我們生活中的一種常態。Scv28資訊網——每日最新資訊28at.com

希望這篇文章能幫助大家更好地理解并欣賞多線程和高并發在我們的數字世界中的作用。Scv28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-13295-0.html面試薪水被壓?那是你還不懂多線程和高并發

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 單體 or 微服務?Service Weaver:我全都要!

下一篇: WhatsApp 僅用 32 名工程師就能支持每天 500 億條消息的八個原因

標簽:
  • 熱門焦點
Top