精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

不卡大黄网站免费看| 天天影视欧美综合在线观看| 狠狠躁夜夜躁久久躁别揉| 国产乱码一区| 激情网站在线观看| 97久久夜色精品国产| 日韩欧美一区中文| 国产免费黄色一级片| 飘雪影院手机免费高清版在线观看| 噜噜爱69成人精品| 国产精品久久久久精k8| 成人激情在线播放| 日本少妇吞精囗交| 久久一区二区中文字幕| 亚洲精品在线网站| 69久久久久久| 爱啪视频在线观看视频免费| 国产精品久久久久久久久免费桃花 | 亚洲日本va午夜在线影院| 国产高清一区视频| 又污又黄的网站| 99在线热播精品免费99热| 色偷偷888欧美精品久久久| 日韩精品在线播放视频| 国产福利片在线观看| 中文字幕一区在线| 欧美不卡福利| 日日夜夜精品免费| 国产综合色产在线精品| 国产精品aaa| 日韩av免费网址| 欧美一区91| 色偷偷偷综合中文字幕;dd| 91亚洲一线产区二线产区 | 婷婷一区二区三区| 中文字幕超清在线免费观看| 男男激情在线| 成a人片亚洲日本久久| 国产精品直播网红| 国产免费一区二区三区四区五区| 在线看片成人| 欧美激情亚洲精品| www.5588.com毛片| 99re66热这里只有精品8| 亚洲欧洲视频在线| 无码人妻精品一区二区三应用大全 | 亚洲成av人片一区二区| 99re6这里有精品热视频| 美女av在线播放| 中文一区一区三区高中清不卡| 欧美精品国产精品久久久| 色屁屁草草影院ccyycom| 国产凹凸在线观看一区二区| 91免费的视频在线播放| 国产精品高潮呻吟AV无码| 日本中文一区二区三区| 国产精品国语对白| 毛片在线免费播放| 日韩电影一区二区三区四区| 欧美在线视频导航| 欧美精品一二三四区| 亚洲一区成人| 日本一欧美一欧美一亚洲视频| 国产成人在线视频观看| 久久精品91| 国产精品wwwwww| 午夜视频网站在线观看| 日韩vs国产vs欧美| 国产欧美va欧美va香蕉在| 一级片在线免费观看视频| 久久69国产一区二区蜜臀| 成人信息集中地欧美| 国产免费叼嘿网站免费| 国产成人综合视频| 国产乱码一区| 国产黄在线观看免费观看不卡| 国产日韩综合av| 一本一本久久a久久精品综合妖精| www视频在线观看免费| 1区2区3区欧美| 亚洲精品蜜桃久久久久久| 三级在线看中文字幕完整版| 色综合久久中文字幕综合网| 黄色三级视频在线| 99久久这里有精品| 亚洲国产精品嫩草影院久久| 瑟瑟视频在线观看| 亚洲成av人片乱码色午夜| 欧美高清在线播放| 成人毛片在线播放| 精品一区二区三区在线观看 | 激情综合婷婷| 亚洲成人a**站| 人妻少妇无码精品视频区| 99tv成人| 26uuu久久噜噜噜噜| 91网站免费入口| 久久免费精品视频在这里| 欧美不卡视频一区发布| 男人日女人网站| 国产美女在线精品| 蜜桃久久影院| 草莓福利社区在线| 懂色aⅴ精品一区二区三区蜜月 | 玛雅亚洲电影| 91精品综合久久久久久| 人人妻人人澡人人爽人人精品| 国产影视精品一区二区三区| 欧美日韩国产999| 亚洲国产av一区二区三区| 国产精品一色哟哟哟| 国产精品你懂得| 国内精品国产成人国产三级| 久久久久国产精品人| 国产一级片91| 成人黄色免费观看| 日韩精品高清视频| 久久久久久久久毛片| 久久精品男女| 国产精品一区二区免费看| 91在线不卡| 日韩欧美成人精品| 亚洲美女高潮久久久| 色综合咪咪久久网| 欧美一区二三区| 亚洲欧美另类视频| 亚洲天堂中文字幕| 嫩草影院国产精品| 你懂的视频欧美| 久久久久五月天| aaaa一级片| 中文字幕一区二区三区不卡在线| 黄在线观看网站| 精品精品国产毛片在线看| 欧美大片在线看免费观看| 91九色蝌蚪91por成人| 久久男人中文字幕资源站| 免费超爽大片黄| 亚洲成人黄色| 欧美精品一本久久男人的天堂| 中文资源在线播放| 国产夜色精品一区二区av| 国产九九九九九| 热三久草你在线| 精品国产成人在线影院| 欧美另类视频在线观看| 国产在线一区二区综合免费视频| 欧美深深色噜噜狠狠yyy| 天堂√中文最新版在线| 亚洲黄页视频免费观看| 91香蕉在线视频| heyzo一本久久综合| 人妻av中文系列| 久久porn| 日本高清视频一区| 激情福利在线| 91激情在线视频| 国产精品国产三级国产专业不| 另类亚洲自拍| 先锋在线资源一区二区三区| 99亚洲伊人久久精品影院| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产一级片av| 国产亚洲精品福利| 日本xxxx黄色| 久久精品一区二区不卡| 亚洲自拍中文字幕| 奇米影视888狠狠狠777不卡| 色综合视频在线观看| 欧美做受高潮6| 蜜桃av一区二区三区| 中文字幕成人一区| 午夜日韩影院| 91av视频在线播放| 成人欧美一区| 日韩欧美一二三| 国产精品成人久久| 久久久亚洲高清| 香港日本韩国三级网站| 欧美a级片网站| 国产在线精品二区| 日韩欧美一区二区三区免费观看| 日韩中文字幕不卡视频| 亚洲精品久久久蜜桃动漫 | 91制片厂免费观看| 亚洲1区在线观看| 日本视频久久久| 老司机免费在线视频| 亚洲精品一区二区三区福利| 国产在线观看黄色| 国产嫩草影院久久久久| 奇米777在线视频| 日韩午夜在线| 亚洲欧美日韩在线综合| 日韩精品久久久久久久软件91| 97国产精品免费视频| 99中文字幕一区| 精品国产一区二区精华| 亚洲av无码精品一区二区| 亚洲精选免费视频| 香蕉网在线播放| 国产精品99久久久久| 国产 日韩 亚洲 欧美| 日韩成人精品一区二区| 国产一区二区黄色| 国产精品久久免费视频| 热门国产精品亚洲第一区在线| 成人黄视频在线观看| 亚洲欧洲国产精品| 亚洲精品一区二区三区蜜桃| 欧美在线高清视频| 日本熟妇毛茸茸丰满| 国产精品久久国产精麻豆99网站| 日本少妇毛茸茸| 国产一区二区福利| 国产嫩草在线观看| 国产一区白浆| 国产专区在线视频| 日本一二区不卡| 久久精品国产精品青草色艺 | 在线欧美一区| 偷拍盗摄高潮叫床对白清晰| 免费av一区二区三区四区| a级国产乱理论片在线观看99| 成人亚洲视频| 琪琪亚洲精品午夜在线| 9lporm自拍视频区在线| 久久成人亚洲精品| 日本最新在线视频| 国产亚洲日本欧美韩国| 毛片在线播放网址| 亚洲国产精品电影在线观看| a在线观看视频| 欧美精选午夜久久久乱码6080| av片免费观看| 色婷婷久久99综合精品jk白丝| 久久高清免费视频| 亚洲影院理伦片| 福利所第一导航| 亚洲激情自拍视频| 国产探花在线播放| 自拍偷自拍亚洲精品播放| 波多野结衣家庭教师在线观看| 久久免费精品国产久精品久久久久| 无码av免费精品一区二区三区| 国产精品综合一区二区三区| 黄色a级三级三级三级| 国产综合久久久久久鬼色| 老司机久久精品| 精品一区二区在线免费观看| 婷婷免费在线观看| 美女网站色91| 亚洲涩涩在线观看| 激情综合色播激情啊| 青青草原播放器| 国产精品一区二区91| 被黑人猛躁10次高潮视频| 国产一区二区福利| 欧美性生交xxxxx| av影院午夜一区| 偷拍女澡堂一区二区三区 | 神马午夜精品91| 亚洲免费观看高清在线观看| 最新一区二区三区| 一区二区成人在线视频| 日韩高清免费av| 日韩欧美中文在线| 中文字幕av久久爽| 欧美丰满美乳xxx高潮www| 91资源在线视频| 日韩欧美国产电影| 午夜视频免费在线| 在线亚洲午夜片av大片| 美女写真理伦片在线看| 久久久久久久久久久久av| 在线观看特色大片免费视频| 国产精品91在线观看| 成人在线分类| 国产精品v欧美精品v日韩| 亚洲国产国产| 亚洲人成网站在线观看播放| 欧美1区免费| 日本a级片免费观看| 美女视频黄免费的久久| 中文字幕乱码在线人视频| 99re热视频精品| 影音先锋制服丝袜| 一级特黄大欧美久久久| 亚洲高清毛片一区二区| 欧美群妇大交群的观看方式| 亚洲老妇色熟女老太| 亚洲欧洲在线看| 91精品久久| 日本一区二区在线免费播放| 国产精选久久| 日韩aⅴ视频一区二区三区| 91精品久久久久久久蜜月 | 国精产品久拍自产在线网站| 亚洲一线二线三线视频| 91麻豆精品在线| 欧美va亚洲va香蕉在线| 国产一级片在线| 欧美交受高潮1| jizz免费一区二区三区| 国产伦精品一区二区三区免费视频 | 91精品国产高清一区二区三区 | 久久久久久福利| 在线观看日韩电影| 人妻精品无码一区二区| 色久欧美在线视频观看| 在线男人天堂| 高清av免费一区中文字幕| 日韩理论片av| 激情网站五月天| 成人一区在线观看| 夫妻性生活毛片| 色菇凉天天综合网| 三级在线观看网站| 欧美国产日韩中文字幕在线| 国产成人毛片| 欧美精彩一区二区三区| 亚洲精品美女| 永久av免费在线观看| 国产精品美女一区二区三区| 成人免费看片98欧美| 精品国产乱码久久| 1024在线播放| 91久久精品久久国产性色也91| 国产日产精品_国产精品毛片| 69sex久久精品国产麻豆| 国产乱色国产精品免费视频| 成人18视频免费69| 欧美在线观看一区| 你懂的免费在线观看视频网站| 高清欧美性猛交| 国产精品男女| 丰满少妇大力进入| 成人ar影院免费观看视频| 久久亚洲av午夜福利精品一区| 91精品国产综合久久久久久久| 99se视频在线观看| 国产精品福利无圣光在线一区| 国产精品密蕾丝视频下载 | 麻豆成人免费电影| 调教驯服丰满美艳麻麻在线视频 | 男人的天堂狠狠干| 成人蜜臀av电影| 国产精品不卡av| 日韩av一区在线| 中文字幕在线直播| 久久久久久久久一区| 国产亚洲综合精品| 免费观看av网站| 色av综合在线| 国产在线视频福利| 国产精品丝袜高跟| 欧美岛国激情| 99精品视频国产| 一区二区三区久久久| 六月婷婷综合网| 97超视频免费观看| 久草成人在线| 超碰在线公开97| 亚洲欧美激情一区二区| 亚洲精品18p| 97视频在线观看播放| 校花撩起jk露出白色内裤国产精品| 欧美日韩黄色一级片| 久久久www成人免费无遮挡大片| 无码人妻精品一区二区50| 中文字幕少妇一区二区三区| 亚洲国产精选| 成人小视频在线观看免费| 99久久婷婷国产| 久久久999久久久| 久久精品国产电影| 丁香综合av| 成人精品视频一区二区| 国产精品国产自产拍高清av| 国产熟女精品视频| 97视频在线观看播放| 波多野结衣在线观看一区二区| 欧洲美女亚洲激情| 午夜精品爽啪视频| av网站在线播放| aaa级精品久久久国产片| 国产亚洲在线观看| 青青青视频在线免费观看| 精品奇米国产一区二区三区| 亚洲国产欧美日本视频| 伊人狠狠色丁香综合尤物| 成人免费看的视频| 国产免费www| 欧美激情一区二区三区成人| 久久99视频| 自拍偷拍激情视频| 欧洲人成人精品| 青青草原国产在线| 神马影院午夜我不卡影院| 成人污污视频在线观看|