博客 RSS 訂閱

美團技術團隊 - 基本功 | 一文講清多線程和多線程同步

多線程編程是現代軟件開發中的一項關鍵技術,在多線程編程中,開發者可以將複雜的任務分解為多個獨立的線程,使其並行執行,從而充分利用多核處理器的優勢。然而,多線程編程也帶來了挑戰,例如線程同步、死鎖和競態條件等問題。本篇文章將深入探討多線程編程的基本概念(原子操作、CAS、Lock-free、內存屏障、偽共享、亂序執行等)、常見模式和最佳實踐。通過具體的代碼示例,希望能夠幫助大家掌握多線程編程的核心技

多線程 , 美團

收藏 評論

威哥愛編程 - 金融系統中Java如何處理大量的交易和請求

金融服務行業需要處理大量的交易和請求,Java的多線程能力可以有效地管理這些併發操作,確保系統的響應性和效率。 在金融服務行業中,例如一個股票交易平台,它需要處理大量的買入和賣出請求,交易邏輯會涉及數據庫交互、錯誤處理和事務管理等方面的複雜性。這就是一個 Java 多線程能力的點型應用了,V 哥從項目中剝離了這個案例,分享給你參考。 1. 定義交易請求和響應 在金融服務行業中,定義清晰的交易請求和

java-ee , 多線程 , JAVA , 併發

收藏 評論

認真的紫菜 - 一個Android App最少有幾個線程?實現多線程的方式有哪些?

本文首發於公眾號“AntDream”,歡迎微信搜索“AntDream”或掃描文章底部二維碼關注,和我一起每天進步一點點 多線程編程是Android應用開發中非常重要的一個環節,可以有效地提升應用的性能和用户體驗。下面是對Android中多線程相關內容的詳細介紹,包括app最少有幾個線程。 1. 基本概念 主線程(UI線程): Android應用啓動時,操作系統會啓動一個主線程,主線程負責更新U

Kotlin , 面試 , Android , 多線程 , JAVA

收藏 評論

soroqer - Rust 和 Go 在多線程的對比

1. Go 的 Goroutine:輕量且高效 Goroutine 是 Go 中非常核心的併發單元。它是 用户級線程,由 Go 的運行時調度器管理,而不是由操作系統的內核調度。 輕量性: 內存佔用:每個 goroutine 的棧內存只有 2KB 左右,遠小於傳統線程的棧大小(一般為幾 MB)。這使得你可以輕鬆地創建成千上萬的 goroutines,而不會造成明顯的內存壓力。

rust , 多線程 , go

收藏 評論

SyntaxError - golang 啓動3個協程交替打印abc10次

var ch1, ch2, ch3 = make(chan struct{}), make(chan struct{}), make(chan struct{}) var wg sync.WaitGroup wg.Add(3) go func(s string) { defer wg.Done() for i := 1; i = 10; i+

多線程 , go , 後端

收藏 評論

SyntaxError - python 3個線程交替打印n、n的平方、n的立方

import threading lock_a = threading.Lock() lock_b = threading.Lock() lock_c = threading.Lock() def print_a(): for i in range(2, 12, 2): lock_a.acquire() print(i) lock_b

多線程 , Python

收藏 評論

小康 - 別再被多線程搞暈了!一篇文章輕鬆搞懂 Linux 多線程同步!

前言 大家有沒有遇到過,代碼跑着跑着,線程突然搶資源搶瘋了?其實,這都是“多線程同步”在作怪。多線程同步是個老生常談的話題,可每次真正要處理時還是讓人頭疼。這篇文章,帶你從頭到尾掌握 Linux 的多線程同步,把概念講成大白話,讓你看了不再迷糊,還能拿出來裝一裝逼!不管是“鎖”、“信號量”,還是“條件變量”,我們都一網打盡,趕緊點贊收藏,一文搞懂! 一、什麼是線程同步?——“排隊來操作,按規矩走”

linux編程 , c++ , 多線程

收藏 評論

張飛的豬 - GoLang協程Goroutiney原理與GMP模型詳解

本文原文地址:GoLang協程Goroutiney原理與GMP模型詳解 什麼是goroutine Goroutine是Go語言中的一種輕量級線程,也成為協程,由Go運行時管理。它是Go語言併發編程的核心概念之一。Goroutine的設計使得在Go中實現併發編程變得非常簡單和高效。 以下是一些關於Goroutine的關鍵特性: 輕量級:Goroutine的創建和切換開銷非常小。與操作系統級別的線

gmp , 多線程 , go

收藏 評論

今夜有點兒涼 - AQS 核心方法和源碼

在 AQS (AbstractQueuedSynchronizer) 中,這些方法涉及到同步的獲取和排隊機制,它們實現了類似於鎖(Lock)和信號量(Semaphore)的功能。AQS 通過內部維護一個 FIFO 隊列和一些節點來管理線程的同步。下面逐個解釋這些方法的作用: AQS 核心方法和源碼 1. acquire(int arg) 作用:嘗試獲取同步狀態,如果失敗,則加入隊列並阻塞線程

源碼分析 , 多線程 , JAVA , 隊列 , aqs

收藏 評論

威哥愛編程 - JAVA線程池有哪些隊列? 以及它們的適用場景案例

大家好,我是 V 哥。在高併發應用場景下,線程池的使用是必然的,那在線程中的隊列都有哪些呢?下面 V 哥整理的幾種常見的線程池隊列以及適用場景案例,分享給大家。 線程池中的隊列主要用於存放等待執行的任務,以下是幾種常見的線程池隊列: 1. 無界隊列(Unbounded Queue) LinkedBlockingQueue(基於鏈表的阻塞隊列): 特點:它是一個基於鏈表實現的阻

高併發 , 多線程 , JAVA , 分佈式

收藏 評論

王中陽講編程 - 某訊面試中常見的Java多線程面試題

這是我花費時間為大家整理的騰訊面試中常問的多線程面試題,看看你掌握多少? 1.什麼是進程?什麼是線程? 2.説説線程的生命週期和狀態? 3.什麼是上下文切換? 4.創建線程創建的方式都有哪些? 5.synchronized 關鍵字的作用 6.線程池的核心構造參數有哪些? 1. 什麼是進程?什麼是線程? 什麼是進程? 進程是程序的一次執行過程,是系統運行

面試問題 , 多線程 , JAVA , 後端

收藏 評論

seazhan - 【Java多線程】斷點續傳 如何使用Java多線程下載網絡文件

如何使用Java多線程下載網絡文件,並實現斷點續傳 在現代網絡應用中,多線程下載是一種常見的技術,它可以顯著提高下載速度並提供更好的用户體驗。本篇文章將介紹如何使用Java實現多線程下載,並結合項目中的代碼作為示例進行講解。 1. 多線程下載的基本原理 多線程下載的基本思想是將一個文件分成多個部分,每個部分由一個線程獨立下載,最後將這些部分合併成完整的文件。這樣可以充分利用帶寬和計算資源,提高下載

多線程 , JAVA

收藏 評論

古拉格的格拉古 - Python多線程基礎(一)

計算機有兩種常見的任務類型 計算密集型,時間多用在I/O操作上,比如文件讀寫、網絡請求、數據庫查詢 I/O密集型,時間多用在計算上,如數值計算、圖像處理、排序、搜索 由於Python存在GIL(全局解釋器鎖),同一時間只有一個線程可以執行Python字節碼,使得在計算密集型任務中無法充分利用多核CPU,因此,Python的多線程一般用於I/O密集型任務。 注:上述Python指Pyt

多線程 , 入門教程 , Python

收藏 評論

Devlive開源社區 - 輕鬆掌握Java多線程 - 第一章:多線程入門

學習目標 理解線程與多線程的基本概念 掌握為什麼要使用多線程編程的主要原因 學習Java中實現多線程的兩種基本方式 創建並運行你的第一個多線程程序 1. 什麼是線程與多線程 1.1 線程的概念 線程是操作系統能夠進行運算調度的最小單位,也是程序執行流的最小單位。簡單來説,線程就是一個單獨的執行路徑,它可以獨立執行特定的代碼片段。 📌 提示: 可以把線程比作是一條流水線上的工人,每

多線程 , JAVA

收藏 評論

異常君 - Java 多線程核心概念與應用場景

在當今高併發、高性能的系統開發中,多線程編程已經成為 Java 開發者必備的核心技能。無論是提高系統吞吐量、優化用户體驗,還是充分利用多核 CPU 資源,多線程技術都扮演着不可或缺的角色。本文作為 Java 多線程系列的開篇,將為你詳細講解多線程的基礎概念、應用場景以及實現方式。 1. 什麼是多線程? 線程是操作系統能夠進行運算調度的最小單位,也是程序執行流的最小單位。多線程就是指從單個進程中創建

線程池 , 線程 , 多線程 , JAVA , 後端

收藏 評論

異常君 - 揭秘 Java 線程安全:從問題根源到實用解決方案

在多線程編程中,線程安全問題就像隱藏在代碼中的定時炸彈,隨時可能引發難以調試的 bug。本文將帶你深入理解線程安全問題的本質,並通過實例分析幾種常用的解決方案,幫助你構建健壯的多線程應用。 一、什麼是線程安全問題? 當多個線程同時訪問共享資源(變量、對象等)並且至少有一個線程會修改該資源時,如果沒有正確的同步機制,就可能產生數據不一致的問題。這就是我們常説的"線程不安全"。 graph TD

線程 , 多線程 , JAVA , thread , 後端

收藏 評論

異常君 - Java 併發編程揭秘:聽我説 happens-before 規則

多線程編程就像走鋼絲,一不小心就掉下去。而 Java 的 happens-before 規則,就是那根讓你穩穩走過去的平衡杆。今天我把這個看起來很深奧的概念拆開來講,讓你真正明白它為啥這麼重要,以及怎麼用它來解決實際問題。 你的代碼可能根本不是按你想的順序執行的! 看這段代碼: int a = 1; int b = 2; int c = a + b; 你以為它就是按這個順序執行的?天真了!JVM

多線程 , JAVA , 併發 , 併發編程 , 後端

收藏 評論

異常君 - 高併發下的計數效率:深入理解 LongAdder

在開發多線程應用時,你是否曾遇到這樣的困擾:隨着併發量增加,系統性能不升反降?特別是在計數器場景下,本應簡單的自增操作卻成了性能瓶頸。這正是許多 Java 開發者共同面臨的痛點。當線程數超過 CPU 核心數或競爭激烈時,AtomicLong 的 CAS 操作不斷失敗重試,CPU 使用率飆升,而業務處理效率卻直線下降。這也是為什麼阿里巴巴在其開發規範中明確推薦使用 LongAdder 來替代傳統方案

atomic , 多線程 , JAVA , 計數 , 後端

收藏 評論

點墨 - 編譯器優化對多線程數據競爭的影響分析

編譯器優化如何讓多線程代碼"失效":從彙編視角解密數據競爭謎題 在多線程編程中,我們常遇到一個反直覺現象:關閉編譯器優化反而能暴露預期的數據競爭問題。本文通過分析MSVC編譯器對同一代碼的不同優化策略,揭示現代編譯器如何通過指令重排和內存訪問優化,徹底改變多線程程序的執行軌跡。 一、現象之謎:優化等級決定程序行為 當使用/O2優化編譯給定代碼時,程序輸出穩定在10萬或20萬這兩個確定值,而非預期的

c++ , 多線程

收藏 評論

vistart - Python3異步編程詳解:從原理到實踐

1. Python異步編程概述 1.1 什麼是異步編程? 異步編程是一種併發編程範式,它允許程序在等待某些操作(如I/O操作)完成時繼續執行其他任務,而不是阻塞等待。Python3.5引入的async/await語法讓異步編程變得更加簡潔和直觀。 1.2 同步 vs 異步 讓我們通過一個簡單的例子來理解兩者的區別: # 同步方式 import time def sync_task(name, d

python3 , 控制枱 , 壓縮 , 多線程 , 異步

收藏 評論

兔子先森 - 原生electron起步-從零到一完成構建和打包

官網:https://www.electronjs.org/zh/ 安裝依賴 初始化package.json pnpm init 安裝依賴 pnpm add -D electron 安裝報錯解決方案:https://blog.csdn.net/qq_38463737/article/details/140277803 1、打開npm的配置文件 # cmd 運行打開配置文件 npm confi

react , vue.js , electron , 前端 , Javascript

收藏 評論

兔子先森 - electron-builder打包配置説明

我們一般使用electron-builder對electron項目進行打包,在package.json中配置打包的詳細操作 pnpm install electron-builder -D package.json中的詳細字段解釋: "build": { "appId": "your.id", // 應用的唯一ID "productName": "YourProductName"

react , vue.js , electron , 前端 , Javascript

收藏 評論

兔子先森 - vue項目打包electron-將已有web項目打包為桌面端

當你需要將一個vue項目打包成electron時,只需要正常的安裝electron依賴、electron-builder依賴,正常的配置好主進程、預加載腳本、渲染進程即可。 依賴安裝 這裏默認你已經寫好了一個vue項目,腳手架為vite,然後需要打包成electron。 安裝electron pnpm add -D electron 安裝electron打包依賴 pnpm install e

react , vue.js , electron , 前端 , Javascript

收藏 評論

兔子先森 - electron打包報錯-image格式問題(.ico報錯)

這種報錯是ico資源文件出錯導致的,可以看看gitHub對此問題的解釋:https://github.com/electron-userland/electron-builder/issues/3889 上圖中打包的logo.ico資源文件格式不對,看起來資源文件後綴是.ico實際上是png格式,你有可能是在一些網站將png轉換為ico,它沒有被正常的轉換為ico,只是將資源文件的後

react , vue.js , electron , 前端 , Javascript

收藏 評論