iOS 淺談各種同步機(jī)制

什么時(shí)候需要用到同步

在同一塊內(nèi)存谨敛,可能會(huì)被多個(gè)線程并發(fā)訪問(wèn)的情況下跨嘉,一般考慮數(shù)據(jù)同步

同步機(jī)制分為3種

根據(jù)不同的同步機(jī)制尊蚁,大致可以分3種亡笑,分別是:

1、鎖:阻塞當(dāng)前線程枝誊,等待一定條件况芒,再往下走
2、串行隊(duì)列:通過(guò)隊(duì)列叶撒,把不同的數(shù)據(jù)操作代碼绝骚,放在同一個(gè)線程執(zhí)行
3、信號(hào)量:控制線程掛起/喚醒

下面分別來(lái)說(shuō)說(shuō)它們各自的工作原理祠够。

以自旋鎖為例:


線程1走在lock與unlock之間時(shí)压汪,
線程2走到lock時(shí),會(huì)執(zhí)行原地進(jìn)行循環(huán)古瓤,轉(zhuǎn)圈止剖,并阻止代碼往下走。

這樣落君,線程2和1不會(huì)同時(shí)訪問(wèn)到同一片資源穿香。等線程1訪問(wèn)完了,線程2就會(huì)跳出循環(huán)绎速,再進(jìn)行數(shù)據(jù)操作皮获。

串行隊(duì)列

不同的線程,把各自數(shù)據(jù)操作任務(wù)纹冤,都放入隊(duì)列中洒宝。然后,隊(duì)列依次把任務(wù)取出來(lái)萌京,放到同一條線程中執(zhí)行雁歌,實(shí)現(xiàn)同步

信號(hào)量

原理跟自旋類(lèi)似。只不過(guò)是從循環(huán)變成線程掛起知残。
如果把它們兩個(gè)比喻成過(guò)紅綠燈的車(chē)子靠瞎,自旋就是紅燈時(shí)原地打圈,信號(hào)量就是紅燈停車(chē),等綠燈再通過(guò)较坛。

兩者相比印蔗,
自旋:一個(gè)不停運(yùn)行的循環(huán)扒最,消耗cpu計(jì)算資源丑勤,不需要喚醒,響應(yīng)快
信號(hào)量:掛起與喚醒有時(shí)間開(kāi)銷(xiāo)吧趣,響應(yīng)稍慢法竞,但掛起節(jié)省cpu

iOS中的同步

  • 上鎖
    簡(jiǎn)單的有NSLock,@synchronized()

  • 使用串行隊(duì)列
    dispatch_queue强挫,dispatch代碼塊到同一個(gè)串行queue

  • 使用信號(hào)量
    dispatch_semaphore岔霸,通過(guò)wait與signal控制
    或者dispatch_group,同理俯渤。

最后說(shuō)兩句

一般的業(yè)務(wù)場(chǎng)景呆细,客戶(hù)端沒(méi)有什么大并發(fā),通常瓶頸不在于用什么鎖八匠,@synchronized()充以滿(mǎn)足業(yè)務(wù)需求絮爷。

只有一點(diǎn)值得注意的是,@synchronized(一塊地址)梨树,一地址對(duì)應(yīng)一個(gè)鎖坑夯。
常說(shuō)@synchronized()性能差,很多時(shí)候是使用不規(guī)范抡四。濫用@synchronized(self)柜蜈,相當(dāng)于所有業(yè)務(wù)都使用的同一個(gè)鎖。這意味著在有些時(shí)候業(yè)務(wù)A的進(jìn)度指巡,需要等待不相關(guān)的業(yè)務(wù)B淑履,能不卡么。

正確的使用姿勢(shì)是:合理地使用@synchronized( lock_obj1 / lock_obj2 ... )藻雪,不同業(yè)務(wù)使用不同的LockObject秘噪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者阔涉。
  • 序言:七十年代末缆娃,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瑰排,更是在濱河造成了極大的恐慌贯要,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椭住,死亡現(xiàn)場(chǎng)離奇詭異崇渗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)宅广,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葫掉,“玉大人,你說(shuō)我怎么就攤上這事跟狱〖蠛瘢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵驶臊,是天一觀的道長(zhǎng)挪挤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)关翎,這世上最難降的妖魔是什么扛门? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮纵寝,結(jié)果婚禮上论寨,老公的妹妹穿的比我還像新娘。我一直安慰自己爽茴,他們只是感情好葬凳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著闹啦,像睡著了一般沮明。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窍奋,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天荐健,我揣著相機(jī)與錄音,去河邊找鬼琳袄。 笑死江场,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窖逗。 我是一名探鬼主播址否,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碎紊!你這毒婦竟也來(lái)了佑附?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仗考,失蹤者是張志新(化名)和其女友劉穎音同,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秃嗜,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡权均,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年顿膨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叽赊。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恋沃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出必指,到底是詐尸還是另有隱情囊咏,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布取劫,位于F島的核電站匆笤,受9級(jí)特大地震影響研侣,放射性物質(zhì)發(fā)生泄漏谱邪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一庶诡、第九天 我趴在偏房一處隱蔽的房頂上張望惦银。 院中可真熱鬧,春花似錦末誓、人聲如沸扯俱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)迅栅。三九已至,卻和暖如春晴玖,著一層夾襖步出監(jiān)牢的瞬間读存,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工呕屎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留让簿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓秀睛,卻偏偏與公主長(zhǎng)得像尔当,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹂安,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容