精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linus:為何對象引用計數(shù)必須是原子的

開發(fā) 后端 前端
Linus大神又在rant了!這次的吐槽對象是時下很火熱的并行技術(shù)(parellism),并直截了當?shù)乇硎静⑿杏嬎闶抢速M所有人時間(“The whole “l(fā)et’s parallelize” thing is a huge waste of everybody’s time.”)。大致意思是說亂序性能快、提高緩存容量、降功耗。

Linus大神又在rant了!這次的吐槽對象是時下很火熱的并行技術(shù)(parellism),并直截了當?shù)乇硎?a title="并行計算基本上就是浪費大家的時間" target="_blank">并行計算是浪費所有人時間(“The whole “let’s parallelize” thing is a huge waste of everybody’s time.”)。大致意思是說亂序性能快、提高緩存容量、降功耗。當然筆者不打算正面討論并行的是是非非(過于宏偉的主題),因為Linus在另一則帖子中舉了對象引用計數(shù)(reference counting)的例子來說明并行的復(fù)雜性。

在Linus回復(fù)之前有人指出對象需要鎖機制的情況下,引用計數(shù)的原子性問題:

Since it is being accessed in a multi-threaded way, via multiple access paths, generally it needs its own mutex — otherwise, reference counting would not be required to be atomic and a lock of a higher-level object would suffice.

由于(對象)通過多線程方式及多種獲取渠道,一般而言它需要自身維護一個互斥鎖——否則引用計數(shù)就不要求是原子的,一個更高層次的對象鎖足矣。

而Linus不那么認為:

The problem with reference counts is that you often need to take them *before* you take the lock that protects the object data.

引用計數(shù)的問題在于你經(jīng)常需要在對象數(shù)據(jù)上鎖保護之前完成它。

The thing is, you have two different cases:

問題有兩種情況:

- object *reference* 對象引用

- object data 對象數(shù)據(jù)

and they have completely different locking.

它們鎖機制是完全不一樣的。

 

Object data locking is generally per-object. Well, unless you don’t have huge scalability issues, in which case you may have some external bigger lock (extreme case: one single global lock).

對象數(shù)據(jù)保護一般是一個對象擁有一個鎖,假設(shè)你沒有海量擴展性問題,不然你需要一些外部大一點的鎖(極端的例子,一個對象一個全局鎖)。

But object *referencing* is mostly about finding the object (and removing/freeing it). Is it on a hash chain? Is it in a tree? Linked list? When the reference count goes down to zero, it’s not the object data that you need to protect (the object is not used by anything else, so there’s nothing to protect!), it’s the ways to find the object you need to protect.

但對象引用主要關(guān)于對象的尋找(移除或釋放),它是否在哈希鏈,一棵樹或者鏈表上。當對象引用計數(shù)降為零,你要保護的不是對象數(shù)據(jù),因為對象沒有在其它地方使用,你要保護的是對象的尋找操作。

And the lock for the lookup operation cannot be in the object, because – by definition – you don’t know what the object is! You’re trying to look it up, after all.

而且查詢操作的鎖不可能在對象內(nèi)部,因為根據(jù)定義,你還不知道這是什么對象,你在嘗試尋找它。

So generally you have a lock that protects the lookup operation some way, and the reference count needs to be atomic with respect to that lock.

因此一般你要對查詢操作上鎖,而且引用計數(shù)相對那個鎖來說是原子的(譯者注:查詢鎖不是引用計數(shù)所在的對象所有,不能保護對象引用計數(shù),后面會解釋為何引用計數(shù)變更時其所在對象不能上鎖)。

And yes, that lock may well be sufficient, and now you’re back to non-atomic reference counts. But you usually don’t have just one way to look things up: you might have pointers from other objects (and that pointer is protected by the object locking of the other object), but there may be multiple such objects that point to this (which is why you have a reference count in the first place!)

當然這個鎖是充分有效的,現(xiàn)在假設(shè)引用計數(shù)是非原子的,但你常常不僅僅使用一種方式來查詢:你可能擁有其它對象的指針(這個指針又被其它對象的對象鎖給保護起來),但同時還會有多個對象指向它(這就是為何你第一時間需要引用計數(shù)的理由)。

See what happens? There is no longer one single lock for lookup. Imagine walking a graph of objects, where objects have pointers to each other. Each pointer implies a reference to an object, but as you walk the graph, you have to release the lock from the source object, so you have to take a new reference to the object you are now entering.

看看會發(fā)生什么?查詢不止存在一個鎖保護。你可以想象走過一張對象流程圖,其中對象存在指向其它對象的指針,每個指針暗含了一次對象引用,但當你走過這個流程圖,你必須釋放源對象的鎖,而你進入新對象時又必須增加一次引用。

And in order to avoid deadlocks, you can not in the general case take the lock of the new object first – you have to release the lock on the source object, because otherwise (in a complex graph), how do you avoid simple ABBA deadlock?

而且為了避免死鎖,你一般不能立即對新對象上鎖——你必須釋放源對象的鎖,否則在一個復(fù)雜流程圖里,你如何避免ABBA死鎖(譯者注:假設(shè)兩個線程,一個是A->B,另一個B->;A,當線程一給A上鎖,線程二給B上鎖,此時兩者誰也無法釋放對方的鎖)?

So atomic reference counts fix that. They work because when you move from object A to object B, you can do this:

原子引用計數(shù)修正了這一點,當你從對象A到對象B,你會這樣做:

(a) you have a reference count to A, and you can lock A

對象A增加一次引用計數(shù),并上鎖。

(b) once object A is locked, the pointer from A to B is stable, and you know you have a reference to B (because of that pointer from A to B)

對象A一旦上鎖,A指向B的指針就是穩(wěn)定的,于是你知道你引用了對象B。

(c) but you cannot take the object lock for B (ABBA deadlock) while holding the lock on A

但你不能在對象A上鎖期間給B上鎖(ABBA死鎖)。

(d) increment the atomic reference count on B

對象B增加一次原子引用計數(shù)。

(e) now you can drop the lock on A (you’re “exiting” A)

現(xiàn)在你可以扔掉對象A的鎖(退出對象A)。

(f) your reference count means that B cannot go away from under you despite unlocking A, so now you can lock B.

對象B的原子引用計數(shù)意味著即使給A解鎖期間,B也不會失聯(lián),現(xiàn)在你可以給B上鎖。

See? Atomic reference counts make this kind of situation possible. Yes, you want to avoid the overhead if at all possible (for example, maybe you have a strict ordering of objects, so you know you can walk from A to B, and never walk from B to A, so there is no ABBA deadlock, and you can just lock B while still holding the lock on A).

看見了嗎?原子引用計數(shù)使這種情況成為可能。是的,你想盡一切辦法避免這種代價,比如,你也許把對象寫成嚴格順序的,這樣你可以從A到B,絕不會從B到A,如此就不存在ABBA死鎖了,你也就可以在A上鎖期間給B上鎖了。

But if you don’t have some kind of forced ordering, and if you have multiple ways to reach an object (and again – why have reference counts in the first place if that isn’t true!) then atomic reference counts really are the simple and sane answer.

但如果你無法做到這種強迫序列,如果你有多種方式接觸一個對象(再一次強調(diào),這是第一時間使用引用計數(shù)的理由),這樣,原子引用計數(shù)就是簡單又理智的答案。

If you think atomic refcounts are unnecessary, that’s a big flag that you don’t actually understand the complexities of locking.

如果你認為原子引用計數(shù)是不必要的,這就大大說明你實際上不了解鎖機制的復(fù)雜性。

Trust me, concurrency is hard. There’s a reason all the examples of “look how easy it is to parallelize things” tend to use simple arrays and don’t ever have allocations or freeing of the objects.

相信我,并發(fā)設(shè)計是困難的。所有關(guān)于“并行化如此容易”的理由都傾向于使用簡單數(shù)組操作做例子,甚至不包含對象的分配和釋放。

People who think that the future is highly parallel are invariably completely unaware of just how hard concurrency really is. They’ve seen Linpack, they’ve seen all those wonderful examples of sorting an array in parallel, they’ve seen all these things that have absolutely no actual real complexity – and often very limited real usefulness.

那些認為未來是高度并行化的人一成不變地完全沒有意識到并發(fā)設(shè)計是多么困難。他們只見過Linpack,他們只見過并行技術(shù)中關(guān)于數(shù)組排序的一切精妙例子,他們只見過一切絕不算真正復(fù)雜的事物——對真正的用處經(jīng)常是非常有限的。

(譯者注:當然,我無意借大神之口把技術(shù)宗教化。實際上Linus又在另一篇帖子中綜合了對并行的評價。)

Oh, I agree. My example was the simple case. The really complex cases are much worse.

哦,我同意。我的例子還算簡單,真正復(fù)雜的用例更糟糕。

I seriously don’t believe that the future is parallel. People who think you can solve it with compilers or programming languages (or better programmers) are so far out to lunch that it’s not even funny.

我嚴重不相信未來是并行的。有人認為你可以通過編譯器,編程語言或者更好的程序員來解決問題,他們目前都是神志不清,沒意識到這一點都不有趣。

Parallelism works well in simplified cases with fairly clear interfaces and models. You find parallelism in servers with independent queries, in HPC, in kernels, in databases. And even there, people work really hard to make it work at all, and tend to expressly limit their models to be more amenable to it (eg databases do some things much better than others, so DB admins make sure that they lay out their data in order to cater to the limitations).

并行計算可以在簡化的用例以及具備清晰的接口和模型上正常工作。你發(fā)現(xiàn)并行在服務(wù)器上獨立查詢里,在高性能計算(High-performance computing)里,在內(nèi)核里,在數(shù)據(jù)庫里。即使如此,人們還得花很大力氣才能使它工作,并且還要明確限制他們的模型來盡更多義務(wù)(例如數(shù)據(jù)庫要想做得更好,數(shù)據(jù)庫管理員得確保數(shù)據(jù)得到合理安排來迎合局限性)。

Of course, other programming models can work. Neural networks are inherently very parallel indeed. And you don’t need smarter programmers to program them either..

當然,其它編程模型倒能派上用場,神經(jīng)網(wǎng)絡(luò)(neural networking)天生就是非常并行化的,你不需要更聰明的程序員為之寫代碼。

參考資料

責任編輯:林師授 來源: 酷 殼
相關(guān)推薦

2020-11-10 08:45:35

Python

2020-05-31 18:08:15

Python數(shù)據(jù)技術(shù)

2017-10-12 12:41:11

PHP圾回收機制變量容器

2023-03-26 22:48:46

Python引用計數(shù)內(nèi)存

2010-08-19 09:24:41

iPhone

2010-03-29 09:11:02

Python引用計數(shù)

2024-12-09 09:00:00

拷貝構(gòu)造函數(shù)傳遞編程

2024-05-13 08:35:27

PyObjectPython對象

2013-08-21 10:53:46

iOS定義區(qū)別

2021-08-10 07:27:42

Python引用計數(shù)法

2024-05-16 08:41:58

PyTypePython類型

2024-04-25 08:21:36

Java對象計數(shù)法

2021-11-30 20:20:55

LinuxWindows

2016-10-09 14:01:27

X86ARMLinux

2020-02-09 17:23:17

Python數(shù)據(jù)字典

2011-08-02 15:55:31

Objective-C NSAutorele

2011-08-15 16:09:44

Cocoa對象Objective-C

2015-07-08 16:28:23

weak生命周期

2025-05-22 09:32:23

2021-12-09 15:45:09

Python弱引用代碼
點贊
收藏

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

成人午夜免费在线| 成人久久一区二区| 亚洲精品一区二区三区影院忠贞| 成人国产激情| 亚洲午夜精品在线| 日本一区二区三区四区高清视频| 91免费视频播放| 亚洲黄色影院| 日韩中文字幕不卡视频| 蜜臀av粉嫩av懂色av| 蜜桃视频成人m3u8| 夜夜嗨av一区二区三区| 日本不卡一区二区三区视频| 国产伦理吴梦梦伦理| 亚洲免费高清| 久久资源免费视频| 天堂久久精品忘忧草| 视频精品一区| 欧美天天综合网| 131美女爱做视频| www在线免费观看视频| 91女人视频在线观看| 91久久嫩草影院一区二区| 97久久久久久久| 欧美一区久久| 中文字幕综合在线| 三级电影在线看| 久久av网站| 欧美日韩综合色| 国产99久久九九精品无码| 在线黄色网页| 中文字幕一区二区三区不卡在线| 欧美动漫一区二区| 蜜臀av在线观看| 国产成人一区二区精品非洲| 国产一区二中文字幕在线看| 日韩在线视频不卡| 一本色道久久| 国内精品久久久久影院 日本资源| 少妇高潮在线观看| 欧美色图国产精品| 亚洲美女久久久| 污污内射在线观看一区二区少妇| 日本一区二区三区视频在线看 | av激情综合网| 91免费在线观看网站| 97超视频在线观看| 久久精品国产久精国产| 国产噜噜噜噜噜久久久久久久久| 波多野结衣黄色| 老色鬼久久亚洲一区二区| 7777免费精品视频| 一区二区三区视频免费看| 亚洲特色特黄| 性亚洲最疯狂xxxx高清| 国产无码精品在线播放| 红桃视频国产一区| 国模精品系列视频| 中文字幕在线观看免费视频| 激情综合电影网| 午夜精品www| 日本三级小视频| 久久av一区| 国产成人鲁鲁免费视频a| 国产免费www| 久久精品国产亚洲a| 91网在线免费观看| 亚洲黄色在线观看视频| 成人午夜电影久久影院| 精品一区久久久| 欧美一区二区三区少妇| 久久久久亚洲综合| 亚洲欧洲一区二区福利| 国产精品扒开做爽爽爽的视频| 亚洲欧美日韩成人高清在线一区| 第九区2中文字幕| a国产在线视频| 日本韩国欧美在线| 网站在线你懂的| 高清日韩中文字幕| 国产婷婷成人久久av免费高清| 婷婷色一区二区三区| 久久久国产精品| 欧美多人乱p欧美4p久久| 精品91久久久| 日本强好片久久久久久aaa| 国产一区二区在线免费| 懂色av蜜臀av粉嫩av分享吧| 2024国产精品视频| 一区二区三区欧美在线| 欧美韩日亚洲| 在线视频综合导航| 亚洲欧美日本一区二区| 婷婷五月色综合香五月| 日韩视频免费观看| 成年人午夜视频| 日本美女一区二区| 国产精品美女黄网| av在线播放网| 亚洲香肠在线观看| 天天干天天操天天玩| 2020最新国产精品| 色爱av美腿丝袜综合粉嫩av| 国产无遮挡免费视频| 日本不卡一二三区黄网| 国产 高清 精品 在线 a| 国产福利在线观看| 亚洲午夜精品久久久久久久久| 欧美成人黑人猛交| 亚洲天堂中文字幕在线观看| 亚洲图片欧美午夜| 久久精品国产亚洲AV无码男同| 日韩中文字幕av电影| 99三级在线| 午夜伦理在线| 色综合久久久久综合体桃花网| 免费人成视频在线播放| 欧洲激情视频| 欧美孕妇毛茸茸xxxx| 成人爽a毛片一区二区| 国产精品久久久久aaaa樱花 | 欧美日韩一区二区三| av网站大全在线| 欧美性感一区二区三区| 黄色污在线观看| 欧美日韩一视频区二区| 国产精品永久免费视频| 欧美色18zzzzxxxxx| 亚洲妇女屁股眼交7| 精品人妻一区二区三| 成人羞羞在线观看网站| 欧美中文字幕在线播放| 刘亦菲久久免费一区二区| 亚洲美腿欧美偷拍| 999这里有精品| 欧美freesextv| 国产精品扒开腿做爽爽爽的视频| 天天摸夜夜添狠狠添婷婷| 亚洲一区二区五区| 制服.丝袜.亚洲.中文.综合懂| 国产精品久久久久一区二区三区厕所 | 精品国产一区二区三区免费| 日本在线观看大片免费视频| 欧美精品vⅰdeose4hd| gv天堂gv无码男同在线观看| 久久在线精品| 日本一区二区三区四区在线观看| 亚洲综合电影| 国产网站欧美日韩免费精品在线观看| 日本少妇全体裸体洗澡| 成人免费的视频| 国产无限制自拍| 精品三级在线观看视频| 久久人人爽人人爽人人片av高请| 成人爽a毛片一区二区| 亚洲第一在线综合网站| 中文字幕a在线观看| 亚洲黄色av| 精品久久蜜桃| 波多野结衣久久精品| 亚洲人成网站777色婷婷| 中文字幕在线天堂| 中文字幕av一区 二区| 三上悠亚在线一区| 91精品国产成人观看| 99视频免费观看| 草草视频在线| 亚洲人成毛片在线播放| 最近中文在线观看| 亚洲六月丁香色婷婷综合久久 | 日韩亚洲欧美视频| 日韩av午夜| 国产成人精品免费久久久久| 最新国产在线观看| 日韩免费高清av| 日本黄色片视频| 国产欧美日产一区| 日本高清免费在线视频| 黄色亚洲在线| 日本精品免费| 美女日韩一区| 欧美在线xxx| 国产视频一区二区| 亚洲第一精品自拍| 中文无码av一区二区三区| 亚洲欧美日本韩国| 欧美bbbbb性bbbbb视频| 男男视频亚洲欧美| 中文字幕无码精品亚洲资源网久久| 免费国产自久久久久三四区久久| 91精品中文在线| 狼人综合视频| zzijzzij亚洲日本成熟少妇| 秋霞av鲁丝片一区二区| 欧美在线一区二区| 国产小视频在线观看免费| 国产性天天综合网| 扒开伸进免费视频| 久久国产综合精品| 看av免费毛片手机播放| 久久久久亚洲| 日本一区二区在线视频观看| 国产一区二区三区国产精品| 欧美专区国产专区| 天天干在线视频论坛| 在线性视频日韩欧美| 日韩一区二区三区不卡| 91精品国产综合久久福利软件| 国产午夜福利精品| 亚洲视频在线一区| 99久久精品免费视频| 懂色中文一区二区在线播放| 亚洲综合婷婷久久| 午夜亚洲性色福利视频| 人妻av无码专区| 欧美mv日韩| 日本精品国语自产拍在线观看| 国产成人一二| 亚洲最大成人免费视频| 香蕉久久久久久| 国产成人精品优优av| 少妇在线看www| 久久久久久网站| 亚洲小说区图片| 日韩小视频在线观看| 韩日在线视频| 亚洲精品小视频| 亚洲 精品 综合 精品 自拍| 欧美一区二区三区免费视频 | 亚洲伊人婷婷| 国产精品亚洲人成在99www| 精品久久sese| 久久精品国产亚洲5555| 超碰97在线播放| 国产精品777777在线播放| 国产欧美精品日韩精品| yw.尤物在线精品视频| 国产成人精品视| 波多野结衣一区二区三区在线| 国产cdts系列另类在线观看| 亚洲高清久久网| 亚洲成人第一区| 欧美成人精品高清在线播放| 国产黄色片免费| 欧美一区二区三区不卡| 国产人妻精品一区二区三区| 欧美二区在线观看| 国产人妖一区二区三区| 欧美夫妻性生活| 国产同性人妖ts口直男| 欧美一区二区三区男人的天堂| 国产ts人妖调教重口男| 日韩欧美一区二区在线视频| 精品国产无码一区二区| 精品卡一卡二卡三卡四在线| 国产高潮在线观看| 日韩小视频在线观看专区| 亚洲av无码国产综合专区| 精品国产91洋老外米糕| 五十路在线视频| 亚洲另类激情图| 第九色区av在线| 久久久999成人| av色综合久久天堂av色综合在| 欧美黑人xxxx| 中文字幕在线直播| 国产精品欧美激情在线播放| 亚洲网站免费| 国产精品美女xx| 久久成人av| 一区二区三区不卡在线| 影视亚洲一区二区三区| a天堂资源在线观看| 国产视频久久| 亚洲久久中文字幕| 国产精品1区2区3区在线观看| 性囗交免费视频观看| 久久久国产一区二区三区四区小说| 国产在线免费av| 一区二区三区四区av| 成人毛片18女人毛片| 欧美视频你懂的| www.国产精品视频| 亚洲精品网站在线播放gif| 麻豆传媒视频在线| 亚州欧美日韩中文视频| 福利一区在线| 国产精品一区在线播放| 北条麻妃国产九九九精品小说| 国产日韩第一页| 夜夜嗨一区二区| 伊人精品视频在线观看| www国产精品av| 欧美日韩中文字幕在线观看 | 久久影视电视剧免费网站清宫辞电视 | 欧美激情性做爰免费视频| 国产高清不卡| 91精品入口蜜桃| 欧美视频网址| 黄网站欧美内射| 紧缚捆绑精品一区二区| 女尊高h男高潮呻吟| 一区二区三区自拍| 中文字幕永久免费视频| 亚洲国产一区自拍| 91蜜桃在线视频| 国产精品久久久久福利| 精品福利网址导航| 99热一区二区三区| 日韩av电影免费观看高清完整版| 在线观看成人动漫| 亚洲人亚洲人成电影网站色| 国产成人无码av| 亚洲成色777777女色窝| 97超碰资源站在线观看| 国产精品久久视频| 亚洲第一论坛sis| 日韩一级性生活片| 国产一区二区三区av电影 | 日韩在线高清| www黄色在线| 国产精品一区二区男女羞羞无遮挡| 99久久久无码国产精品性| 午夜精品久久久久久久99水蜜桃| 国产高清不卡视频| 久久午夜a级毛片| 成人精品国产| 亚洲精品国产一区| 首页国产欧美日韩丝袜| 成人精品在线观看视频| 红桃视频成人在线观看| 人妻一区二区三区四区| 欧美大片欧美激情性色a∨久久| 粉嫩av国产一区二区三区| 色综合视频二区偷拍在线| 视频在线观看一区| 国产精品九九九九九| 欧美日韩亚洲高清| 婷婷伊人综合中文字幕| 午夜精品久久久久久久久久久久 | 久久久加勒比| 亚洲国产精品毛片| 美女尤物国产一区| 女人裸体性做爰全过| 欧美日韩三级视频| 欧美精品电影| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美丰满美乳xxx高潮www| 91网在线播放| 国产精品一香蕉国产线看观看| 日韩成人影院| 一级黄色在线播放| 亚洲精品中文在线| 黄频在线免费观看| 久久777国产线看观看精品| 免费精品一区二区三区在线观看| 亚洲啊啊啊啊啊| www.亚洲人| 天堂а√在线中文在线新版| 亚洲视频在线观看视频| 成人精品国产| 日本成人在线不卡| 国产高清精品网站| 日韩精品一卡二卡| 亚洲天堂免费在线| 欧美天堂一区| 欧美激情亚洲天堂| 91在线观看下载| 99re国产在线| 久久成人18免费网站| 爱爱精品视频| 欧美精品色婷婷五月综合| 中文字幕免费一区| 国产麻豆精品一区| 97超碰色婷婷| 日本精品三区| 中文字幕亚洲日本| 色婷婷一区二区三区四区| 午夜伦全在线观看| 国产精品一区二区三区不卡| 丝袜美腿亚洲色图| 久久久精品视频免费观看| 亚洲国产中文字幕久久网 | 国产精品毛片在线| 国产精品18在线| 精品国产乱码久久| 97久久网站| 国产美女主播在线| 国产情人综合久久777777| 性生活视频软件| 国产va免费精品高清在线| 91精品婷婷色在线观看| 国产 中文 字幕 日韩 在线| 精品视频一区二区三区免费| 超碰在线中文字幕| 亚洲欧洲精品在线观看| 99久久免费视频.com| 国产精品特级毛片一区二区三区| 97精品国产97久久久久久免费 | 久久精品国亚洲|