成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊并發編程兩原則,你明白了嗎?

開發 前端
合并操作涉及很多算法, 某些算法不需要緩存, 僅僅是從多層(多個節點)之中選出一個 Winner, 以該 Winner 作為輸出結果. 這時, 單點標記就是輸出結果的指針, 指向 Winner。

之前寫過一篇文章, 并發編程的核心技術 – 多版本(Multi Versioning), 本文繼續對并發編程做一次更全面的總結, 這樣的總結并非具體的編程指導, 而概括性的理論, 是筆記性質的.

根據經驗總結, 并發編程的指導思想可以總結為兩個原則, 也即并發編程兩原則:

  1. Sharding/Partitioning
  2. Leveling

Sharding

Sharding 技術常見于分布式系統, 如果我舉一個編程技巧里常用的技術, 估計你會比較熟悉 - 哈希鎖. 例如 Java 語言里的 ConcurrentHashMap, 內部就是把整個容器分成獨立的多個分段, 每個分段對應一把鎖. 或者某些 KV 數據庫, 預先分配若干個鎖到數組中, 然后把每一個 key 根據 hash 算法對應不同的鎖上面, 當需要對 key 加鎖時, 加的是對應的那把鎖, 兩個 key 概率上可以同時加鎖(并發).

分布式系統的核心之一就是 Sharding, 我曾經說過"無 Sharding, 不分布式", 指出沒有嚴謹 Sharding 機制的多副本系統是偽分布式, 即使是所謂的強一致性多副本系統, 如無 Sharding 便是"偽分布式". Sharding 也是計算機科學領域核心思想之一的分而治之思想.

所以, 如果你遇到因為鎖粒度太大導致多個并發操作相互阻塞的問題, 最直接的解決方案就是分析細化和拆分資源(做 Sharding), 不同的資源對應不同的鎖, 這樣就解決了阻塞問題. 一些初學者非常害怕和排斥鎖, 我覺得沒有必要. 程序的本質是串行化, 是鎖, 我們能做的無非是: 減小鎖粒度.

Sharding 是一種豎直分拆, 分拆出來的每一個 Shard 都是完全獨立的(shared-nothing). 這一點和接下來要提到的 Leveling 在空間上剛好垂直.

Leveling

Leveling 是一種水平分拆, 也叫 Layering(多層級). 在數據庫領域, 它也叫 Multi Versioning(MVCC). 和 Photoshop 里作圖類似, Leveling 包含多個 Level(層), 將不同的層級進行疊加(Merge), 最終形成一個統一的輸出對象.

和 Photoshop 類似, 我們可以獨立地操作每一個層, 如果需要加鎖, 那就加在層上面, 因此, 也達到了減小鎖粒度的效果. 看到了吧? 并發編程的唯一指導思想就是減小鎖粒度. 妄圖完全消除鎖, 將在指導思想上發生根本錯誤.

Leveling 和 Sharding 技術的區別, 就在于它們如何對外展現. Leveling 需要將所有層進行合并, 才能輸出結果. 而 Sharding 技術中的每一個 Shard, 可以獨立地輸出結果. 顯然, 在這一點上 Sharding 技術要優于 Leveling. 既然 Sharding 更優, 為什么還需要 Leveling 呢? 因為, 事物并不總是可以做 Sharding, 有時候你做不了 Sharding.

單點標記

單點標記不是并發編程的核心原則, 而是 Leveling 技術的常見優化手段. 我們知道, Leveling 技術需要合并(Merge)操作, 合并操作可能成本較大, 這時, 我們需要把結果進行緩存. 但緩存和原始的層是同等地位的, 可能出現所謂的不一致(不相同)的問題, 所以, 需要引入一個單點標記, 對兩者是否一致進行確認(check point, commit point), 就好像把兩個子節點掛到了同一個父節點之下.

另外, 合并操作涉及很多算法, 某些算法不需要緩存, 僅僅是從多層(多個節點)之中選出一個 Winner, 以該 Winner 作為輸出結果. 這時, 單點標記就是輸出結果的指針, 指向 Winner.

總結

總結出簡潔的基礎理論, 對我們的工作有什么幫助呢? 我認為, 一是可以幫助我們記憶, 二是掌握了基礎理論之后, 可以隨時推導出已有的大量紛紜復雜的技術, 不至于被亂花迷了眼.

另外, 并發編程和分布式系統本質上如此相似, 后面我將寫一些文章, 用同樣的基礎理論對分布式系統進行分析.

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-10-19 08:19:32

動態基線預警

2022-10-24 20:25:40

云原生SpringJava

2024-03-05 10:09:16

restfulHTTPAPI

2022-05-31 07:32:19

JDK8API工具

2021-09-16 21:34:52

5G專線

2024-05-30 08:19:52

微服務架構大型應用

2023-04-04 08:42:30

IT成本技術堆

2023-01-29 08:08:34

并發庫conc通用庫

2022-03-03 09:20:08

分布式數據庫場景

2022-07-27 08:31:28

SQL開發控制

2024-11-08 08:56:01

2023-07-03 09:59:00

并發編程并發容器

2022-12-30 08:35:00

2021-11-30 06:56:59

緩存穿透數據庫

2024-08-09 13:39:27

2023-12-28 08:43:28

前端算法搜索

2024-01-08 20:05:32

2022-04-07 11:15:22

PulseEventAPI函數

2023-12-08 08:38:15

EventLoopAPI瀏覽器

2022-10-10 18:38:56

inert屬性鍵盤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久丁香| 亚洲精品免费在线 | 欧美日韩国产在线观看 | 国产精品成人一区二区三区 | 色久电影 | 国产精品久久久久久 | 国产精品视频免费 | 久久精品国产久精国产 | 午夜成人在线视频 | 成人在线视频免费观看 | 仙人掌旅馆在线观看 | 久久精品小视频 | 国产精品久久久久久久久图文区 | 97国产精品视频人人做人人爱 | 欧美日韩成人在线 | 在线看一区二区 | 国产丝袜一区二区三区免费视频 | 久久久久久国产精品免费免费 | 欧美一二区 | 日韩二区| 中国美女一级黄色片 | 欧美成人影院 | 一级黄片一级毛片 | 亚洲精品国产一区 | 久久亚洲一区 | 欧美日韩精品一区 | 国产精品久久久亚洲 | 亚洲成人精品国产 | 欧美极品在线 | 日韩在线免费视频 | 欧美激情欧美激情在线五月 | 欧美二区三区 | 日日夜夜精品视频 | 国产成人精品一区二区三区视频 | 精品国产91久久久久久 | 国产在线一区二区三区 | 一区二区国产在线观看 | 免费视频成人国产精品网站 | 91激情视频 | 欧美v在线 | 在线成人 |