動態

@jkkang

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

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

jkkang 頭像

@jkkang

昵稱 小康

@zhangfeidezhu

GoLang協程Goroutiney原理與GMP模型詳解

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

zhangfeidezhu 頭像

@zhangfeidezhu

昵稱 張飛的豬

@jinyeyoudianerliang

AQS 核心方法和源碼

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

jinyeyoudianerliang 頭像

@jinyeyoudianerliang

昵稱 今夜有點兒涼

@finally_m

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

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

finally_m 頭像

@finally_m

昵稱 威哥愛編程

@wangzhongyang_go

某訊面試中常見的Java多線程面試題

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

wangzhongyang_go 頭像

@wangzhongyang_go

昵稱 王中陽講編程

@seazhan

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

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

seazhan 頭像

@seazhan

昵稱 seazhan

@azonips314

Python多線程基礎(一)

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

azonips314 頭像

@azonips314

昵稱 古拉格的格拉古

@devlive

輕鬆掌握Java多線程 - 第一章:多線程入門

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

devlive 頭像

@devlive

昵稱 Devlive開源社區

@chen_67f9ccbe6f07b

Java 多線程核心概念與應用場景

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

chen_67f9ccbe6f07b 頭像

@chen_67f9ccbe6f07b

昵稱 異常君

@chen_67f9ccbe6f07b

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

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

chen_67f9ccbe6f07b 頭像

@chen_67f9ccbe6f07b

昵稱 異常君

@chen_67f9ccbe6f07b

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

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

chen_67f9ccbe6f07b 頭像

@chen_67f9ccbe6f07b

昵稱 異常君

@chen_67f9ccbe6f07b

高併發下的計數效率:深入理解 LongAdder

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

chen_67f9ccbe6f07b 頭像

@chen_67f9ccbe6f07b

昵稱 異常君

@chencaize

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

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

chencaize 頭像

@chencaize

昵稱 點墨

@vistart

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

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

vistart 頭像

@vistart

昵稱 vistart

@tuzixiansen_63d4d65909d62

vue項目打包electron-將已有web項目打包為桌面端

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

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

electron打包報錯-image格式問題(.ico報錯)

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

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

electron打包報錯errorOut=ERROR: Cannot create symbolic link

這種打包報錯實際上是缺少對應文件,由於electron在打包時會下載資源,有些資源需要科學上網,所以正常打包網速過慢會導致資源丟失。 像上圖報錯,很明顯是丟失winCodeSign-2.6.0資源,所以我們需要去下載對應資源 資源下載鏈接:https://github.com/electron-userland/electron-builder-binaries/release

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@gqkmiss

Electron 客户端項目自啓動

app.setLoginItemSettings 與 auto-launch 對比分析 一、穩定性對比 1. app.setLoginItemSettings 優點:作為Electron官方API,有官方維護和支持 缺點: 在某些Windows版本上存在已知問題 部分Windows 10/11更新後可能失效 在macOS權限更嚴格的版本上可能需要額外授權

gqkmiss 頭像

@gqkmiss

昵稱 月恆

@gqkmiss

Electron 開發:獲取當前客户端 IP

Electron 開發:獲取當前客户端 IP 一、背景與需求 1. 項目背景 客户端會自啓動一個服務,Web/後端服務通過 IP + port 請求以操作客户端接口 2. 初始方案與問題 2.1. 初始方案:通過代碼獲取本機 IP /** * 獲取局域網 IP * @returns {string} 局域網 IP */ export function getLocalIP(): string

gqkmiss 頭像

@gqkmiss

昵稱 月恆

@tongbo

electron 主進程和渲染進程通信的三種方式及使用場景

在 Electron 中,send/on、sendSync 和 invoke/handle 是三種不同的進程間通信 (IPC) 機制,它們的區別主要體現在同步性、API 設計和使用場景上。 與 Chromium 相同,Electron 使用進程間通信(IPC)來在進程之間進行通信: ipcMain 是一個僅在主進程中以異步方式工作的模塊,用於與渲染進程交換消息。 ipcRenderer 是一

tongbo 頭像

@tongbo

昵稱 牙小木木