ArrayDeque(JDK雙端隊列)源碼深度剖析 前言 在本篇文章當中主要跟大家介紹JDK給我們提供的一種用數組實現的雙端隊列,在之前的文章LinkedList源碼剖析當中我們已經介紹了一種雙端隊列,不過與ArrayDeque不同的是,LinkedList的雙端隊列使用雙向鏈表實現的。 雙端隊列整體分析 我們通常所談論到的隊列都是一端進一端出,而雙端隊列的兩端則都是可進可出。下面是雙端隊列的幾個
深入剖析(JDK)ArrayQueue源碼 前言 在本篇文章當中主要給大家介紹一個比較簡單的JDK為我們提供的容器ArrayQueue,這個容器主要是用數組實現的一個單向隊列,整體的結構相對其他容器來説就比較簡單了。 ArrayQueue內部實現 在談ArrayQueue的內部實現之前我們先來看一個ArrayQueue的使用例子: public void testQueue() { Arr
進程最後的遺言 前言 在本篇文章當中主要給大家介紹父子進程之間的關係,以及他們之間的交互以及可能造成的狀態,幫助大家深入理解父子進程之間的關係,以及他們之間的交互。 殭屍進程和孤兒進程 殭屍進程 在 Unix 操作系統和類 Unix 操作系統當中,當子進程退出的時候,父進程可以從子進程當中獲取子進程的退出信息,因此在 類 Unix 操作系統當中只有父進程通過 wait 系統調用讀取子進程的退出狀態
深入理解 python 虛擬機:魔術方法之數學計算 在本篇文章當中主要給大家介紹在 python 當中一些常見的魔術方法,本篇文章主要是關於與數學計算相關的一些魔術方法,在很多科學計算的包當中都使用到了這些魔術方法。 大小比較 當我們在Python中定義自己的類時,可以通過重寫一些特殊方法來改變對象的比較行為。這些特殊方法包括__lt__、__le__、__eq__、__ne__、__gt__和_
OpenMP task construct 實現原理以及源碼分析 前言 在本篇文章當中主要給大家介紹在 OpenMP 當中 task 的實現原理,以及他調用的相關的庫函數的具體實現。在本篇文章當中最重要的就是理解整個 OpenMP 的運行機制。 從編譯器角度看 task construct 在本小節當中主要給大家分析一下編譯器將 openmp 的 task construct 編譯成什麼樣子,下面
OpenMP 線程同步 Construct 實現原理以及源碼分析(上) 前言 在本篇文章當中主要給大家介紹在 OpenMP 當中使用的一些同步的 construct 的實現原理,如 master, single, critical 等等!並且會結合對應的彙編程序進行仔細的分析。(本篇文章的彙編程序分析基於 x86_86 平台) Flush Construct 首先先了解一下 flush const
OpenMP 原子指令設計與實現 前言 在本篇文章當中主要與大家分享一下 openmp 當中的原子指令 atomic,分析 #pragma omp atomic 在背後究竟做了什麼,編譯器是如何處理這條指令的。 為什麼需要原子指令 加入現在有兩個線程分別執行在 CPU0 和 CPU1,如果這兩個線程都要對同一個共享變量進行更新操作,就會產生競爭條件。如果沒有保護機制來避免這種競爭,可能會導致結果錯
深入理解 OpenMP 線程同步機制 前言 在本篇文章當中主要給大家介紹 OpenMP 當中線程的同步和互斥機制,在 OpenMP 當中主要有三種不同的線程之間的互斥方式: 使用 critical 子句,使用這個子句主要是用於創建臨界區和 OpenMP 提供的運行時庫函數的作用是一致的,只不過這種方法是直接通過編譯指導語句實現的,更加方便一點,加鎖和解鎖的過程編譯器會幫我們實現。 使用 at
gcc 好玩的 builtin 函數 前言 在本篇文章當中主要想給大家介紹一些在 gcc 編譯器當中給我們提供的一些好玩的內嵌函數 (builtin function)🤣🤣🤣 。 __builtin_frame_address 使用內嵌函數實現 __builtin_frame_address(x) // 其中 x 一個整數 這個函數主要是用於得到函數的棧幀的,更具體的來説是得到函數的 rbp
HashMap源碼深度剖析,手把手帶你分析每一行代碼! 在前面的兩篇文章哈希表的原理和200行代碼帶你寫自己的HashMap(如果你閲讀這篇文章感覺有點困難,可以先閲讀這兩篇文章)當中我們仔細談到了哈希表的原理並且自己動手使用線性探測法實現了我們自己的哈希表MyHashMap。在本篇文章當中我們將仔細分析JDK當中HashMap的源代碼。 首先我們需要了解的是一個容器最重要的四個功能 增刪改查 ,