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

ZooKeeper 分布式鎖 Curator 源碼之三:可重入鎖并發(fā)加鎖

大數(shù)據(jù) 分布式
在了解了加鎖和鎖重入之后,最需要了解的還是在分布式場(chǎng)景下或者多線程并發(fā)加鎖是如何處理的?

[[410513]]

前言

在了解了加鎖和鎖重入之后,最需要了解的還是在分布式場(chǎng)景下或者多線程并發(fā)加鎖是如何處理的?

1并發(fā)加鎖

先來看結(jié)果,在多線程對(duì) /locks/lock_01 加鎖時(shí),是在后面又創(chuàng)建了新的臨時(shí)節(jié)點(diǎn)。

這塊在加鎖方法 CreateBuilderImpl#pathInForeground 中已經(jīng)介紹過

這里判斷 /locks/lock_01 路徑已經(jīng)存在,會(huì)直接創(chuàng)建新的臨時(shí)順序節(jié)點(diǎn)。

真正判斷鎖是否獲取成功,其實(shí)是在 LockInternals#attemptLock 方法中的 internalLockLoop 方法中。

加鎖結(jié)果及監(jiān)聽

internalLockLoop 方法的主要作用是判斷加鎖結(jié)果,以及獲取鎖失敗時(shí),對(duì)其他節(jié)點(diǎn)的監(jiān)聽。

  1. 獲取父節(jié)點(diǎn) /locks/lock_01 下的所有子節(jié)點(diǎn),按照從小到大排序,判斷自己是不是獲取到鎖,沒有獲取到就監(jiān)聽自己前一個(gè)節(jié)點(diǎn);
  2. 支持設(shè)置超時(shí)時(shí)間,超時(shí)直接返回失敗;
  3. 不支持設(shè)置超時(shí)時(shí)間或者還沒有超時(shí),則直接 wait 等待。

是否獲取鎖的代碼在 StandardLockInternalsDriver#getsTheLock

這塊就是判斷是否為最小節(jié)點(diǎn),因?yàn)樵?getSortedChildren 中已經(jīng)對(duì)所有節(jié)點(diǎn)排序,所以方法中的 List children 是有序的。

maxLeases 是在 InterProcessMutex 初始化的時(shí)候,指定的值為 1。

最終這里的結(jié)果是,判斷自己是不是最小,不是最小,就將 pathToWatch 設(shè)置為前一個(gè)節(jié)點(diǎn)。

只監(jiān)聽自己的前一個(gè)節(jié)點(diǎn),可以避免羊群效應(yīng)!

為什么要進(jìn)行等待呢?

因?yàn)槭菫榱朔乐篃o效自旋,因?yàn)檫@里有監(jiān)聽機(jī)制,會(huì)監(jiān)聽上一個(gè)節(jié)點(diǎn)是否釋放。

這塊是 ZooKeeper 的 Watcher 監(jiān)聽機(jī)制,在節(jié)點(diǎn)釋放的時(shí)候,會(huì)進(jìn)行回調(diào),然后使用 Java 的 notifyAll 方法通知所有的 wait 線程。然后這里的 while trye 會(huì)繼續(xù)執(zhí)行,重新檢查是否獲得鎖等。

2總結(jié)

本文主要介紹了基于 ZooKeeper 的分布式鎖框架 Curator 在并發(fā)場(chǎng)景下的鎖競(jìng)爭(zhēng)問題。

重點(diǎn)需要了解的是:

  1. 為了避免羊群效應(yīng),臨時(shí)順序節(jié)點(diǎn),加鎖失敗后監(jiān)聽的是前一個(gè)節(jié)點(diǎn);
  2. 為了避免無效自旋,這里使用了 Java 的 wait/notifyAll 機(jī)制;
  3. 可以看出,默認(rèn)加鎖就是公平鎖。

本文轉(zhuǎn)載自微信公眾號(hào)「程序員小航」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序員小航公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 程序員小航
相關(guān)推薦

2021-07-08 09:21:17

ZooKeeper分布式鎖 Curator

2021-07-09 06:48:31

ZooKeeperCurator源碼

2021-06-27 21:24:55

RedissonJava數(shù)據(jù)

2021-07-16 07:57:34

ZooKeeperCurator源碼

2021-06-30 14:56:12

Redisson分布式公平鎖

2021-07-01 09:42:08

Redisson分布式

2021-07-03 17:45:57

分布式Redisson MultiLock

2020-06-15 08:15:47

分布式鎖系統(tǒng)

2022-01-14 08:35:58

Curator分布式鎖Zookeeper

2017-10-24 11:28:23

Zookeeper分布式鎖架構(gòu)

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2021-07-06 08:37:29

Redisson分布式

2025-04-23 08:50:00

SpringBootCurator分布式鎖

2021-02-28 07:49:28

Zookeeper分布式

2020-11-16 12:55:41

Redis分布式鎖Zookeeper

2019-07-16 09:22:10

RedisZookeeper分布式鎖

2021-07-02 08:51:09

Redisson分布式鎖公平鎖

2024-01-30 08:41:33

線程執(zhí)行Redis分布式鎖

2022-03-11 10:03:40

分布式鎖并發(fā)

2022-03-07 08:14:27

并發(fā)分布式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品视频久久久久久 | 精品国产一区二区三区日日嗨 | 日韩色在线 | 国产aa| 天天干天天玩天天操 | 久久久久久国产精品mv | 综合色站导航 | 欧美视频1区| 国产91综合一区在线观看 | 欧美 日韩 国产 在线 | 国产精品久久欧美久久一区 | 久草视频网站 | 国产羞羞视频在线观看 | 国产一区不卡 | 国产美女在线观看 | 一级做a爰片性色毛片16 | 热re99久久精品国产99热 | 亚洲一区二区免费视频 | 久久久国产精品 | 国产一区影院 | 三级成人在线 | 国产大片黄色 | 中文字幕一区二区三区日韩精品 | 日韩在线91 | 久久久久久国 | 成人小视频在线观看 | 国产精品高潮呻吟久久 | 亚洲精品一区二区在线观看 | 91久久国产综合久久 | 一区二区三区福利视频 | 伊人91在线 | 欧美成人一区二区三区 | 欧美日韩综合 | 日韩欧美中文 | 欧美白人做受xxxx视频 | 日韩久久精品视频 | 国产成人jvid在线播放 | 天堂网avav | 欧美久久一区 | 免费观看一级特黄欧美大片 | 成人自拍视频 |