自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揭秘Facebook官方底層C++函數(shù)Folly

譯文
開發(fā) 后端
Facebook近日公布了其官方底層C++函數(shù)Folly,F(xiàn)olly(該縮略語(yǔ)表示Facebook開源代碼庫(kù))其實(shí)是C++11組件庫(kù),這些組件在設(shè)計(jì)時(shí)著眼于實(shí)用性和高效率。

【51CTO經(jīng)典譯文】Folly與Boost、當(dāng)然還有std等組件庫(kù)的關(guān)系是互為補(bǔ)充,而不是彼此競(jìng)爭(zhēng)。實(shí)際上,只有當(dāng)我們需要的東西既沒有,也無(wú)法滿足所需的性能要求時(shí),我們才開始定義自己的組件。

性能問(wèn)題貫穿著Folly的大部分,有時(shí)導(dǎo)致比較具有特質(zhì)性的設(shè)計(jì)(比如PackedSyncPtr.h和SmallLocks.h)。整體上確保良好的性能是所有Folly的統(tǒng)一主題。

邏輯設(shè)計(jì)

Folly是一組相對(duì)獨(dú)立的組件的集合體,有些組件就是幾個(gè)符號(hào)這么簡(jiǎn)單。內(nèi)部依賴方面沒有限制,這意味著某個(gè)特定的folly模塊可以使用其他任何的folly組件。

所有符號(hào)都在頂層的命名空間folly中加以定義,當(dāng)然除了宏。宏名稱是ALL_UPPERCASE。命名空間folly定義了其他的內(nèi)部命名空間,比如internal或detail。用戶代碼應(yīng)該不依賴那些命名空間中的符號(hào)。

物理設(shè)計(jì)

在頂層,F(xiàn)olly采用經(jīng)典的“結(jié)巴”(stuttering)方案folly/folly,這也是Boost及其他組件庫(kù)所采用的。***個(gè)目錄充當(dāng)庫(kù)的安裝根目錄(可能是以folly-1.0/這樣的形式);第二個(gè)目錄是添加文件時(shí)用來(lái)辨別組件庫(kù),比如#include "folly/FBString.h"。

目錄結(jié)構(gòu)是扁平的(模仿命名空間結(jié)構(gòu)),也就是說(shuō)我們沒有復(fù)雜的目錄層次結(jié)構(gòu)(這個(gè)情況在將來(lái)的版本中可能會(huì)有變化)。子目錄experimental含有在folly里面使用的文件,可能用在Facebook端,但是被認(rèn)為不夠穩(wěn)定,無(wú)法在客戶端使用。你的代碼不該使用folly/experimental中的文件,以免你在更新Folly時(shí),出現(xiàn)問(wèn)題。

folly/folly/test子目錄包括了面向所有組件的單元測(cè)試,通常名為ComponentXyzTest.cpp,面向每個(gè)ComponentXyz.*。folly/folly/docs目錄含有說(shuō)明文檔。

兼容性

目前,folly已在64位安裝版Fedora 17、Ubuntu 12.04和Debian wheezy的gcc 4.6上進(jìn)行了測(cè)試。它不用改動(dòng),就可以在其他64位Linux平臺(tái)上運(yùn)行。

組件

下面按字母順序介紹了一系列Folly組件,另外附有每個(gè)組件的簡(jiǎn)短描述。

Arena.h,ThreadCachedArena.h

內(nèi)存分配的簡(jiǎn)單地方:多次內(nèi)存分配同時(shí)被釋放。使用線程版本。

AtomicHashMap.h,AtomicHashArray.h

高性能的原子哈希圖,采用幾乎無(wú)鎖的操作。

Benchmark.h

用于代碼基準(zhǔn)測(cè)試的小型框架??蛻舳舜a注冊(cè)基準(zhǔn)測(cè)試,可選情況下使用一個(gè)變量來(lái)規(guī)定基準(zhǔn)測(cè)試的范圍(迭代和工作集大小等)??蚣苓\(yùn)行基準(zhǔn)測(cè)試(受制于命令行標(biāo)記),生成帶計(jì)時(shí)信息的格式化輸出。

Bits.h

各種位處理實(shí)用組件,針對(duì)速度而優(yōu)化。

Bits.h

位變換函數(shù),使用統(tǒng)一接口包裝ffsl(l)圖元。

ConcurrentSkipList.h

實(shí)現(xiàn)了用證實(shí)正確的可擴(kuò)展并發(fā)跳躍表(Provably Correct Scalable Concurrent Skip List)描述的結(jié)構(gòu),這種跳躍表由Herlihy及其他人共同開發(fā)。

Conv.h

各種數(shù)據(jù)轉(zhuǎn)換例程(尤其是to和from字符串),針對(duì)速度和安全進(jìn)行了優(yōu)化。

DiscriminatedPtr.h

類似boost::variant,但完全局限于指針。使用指針中***位、未使用的16位作為鑒別器。所以sizeof(DiscriminatedPtr<int, string, Widget>) == sizeof(void*)。

dynamic.h

動(dòng)態(tài)類型對(duì)象,創(chuàng)建時(shí)關(guān)注JSON對(duì)象。

Endian.h

Endian轉(zhuǎn)換圖元。

Escape.h

以C方式轉(zhuǎn)義字符串。

eventfd.h

針對(duì)eventfd系統(tǒng)調(diào)用的包裝器。

FBString.h

嵌入式實(shí)現(xiàn)std::string,進(jìn)行了諸多優(yōu)化。

FBVector.h

基本上嵌入式實(shí)現(xiàn)std::vector,進(jìn)行了諸多優(yōu)化。

Foreach.h

偽語(yǔ)句(作為宏語(yǔ)句來(lái)實(shí)現(xiàn)),用于迭代。

Format.h

Python式樣的格式化實(shí)用組件。

GroupVarint.h

針對(duì)32位值的Group Varint編碼。

Hash.h

各種流行的哈希函數(shù)實(shí)現(xiàn)。

Histogram.h

一個(gè)簡(jiǎn)單的類,用于收集直方圖數(shù)據(jù)。

IntrusiveList.h

方便類型定義,用于使用boost::intrusive_list。

json.h

JSON序列化器和反序列化器。使用dynamic.h。

Likely.h

針對(duì)__builtin_expect的包裝器。

Malloc.h

內(nèi)存分配助手,尤其是使用jemalloc時(shí)。

MapUtil.h

一種助手,用于查找聯(lián)合容器中的項(xiàng)目(比如std::map和std::unordered_map)。

PackedSyncPtr.h

一種高度專業(yè)化的數(shù)據(jù)結(jié)構(gòu),含有指針、1位旋轉(zhuǎn)鎖和15位整數(shù),它們都在一個(gè)64位單詞中。

Preprocessor.h

不好但又必不可少的組件。

PrettyPrint.h

針對(duì)數(shù)字的美化打印組件,用于添加所用單元的后綴:字節(jié)(kb、MB等)、度量單位后綴(k、M和G等)以及時(shí)間(s、ms、us和ns等)。

ProducerConsumerQueue.h

無(wú)鎖單讀取器單寫入器隊(duì)列。

Random.h

只定義了一個(gè)函數(shù):randomNumberSeed()。

Range.h

Boost式樣的范圍工具和StringPiece專門化。

RWSpinLock.h

快速而緊湊的讀取器/寫入器旋轉(zhuǎn)鎖。

ScopeGuard.h

老式ScopeGuard用語(yǔ)的C++11版本。

SmallLocks.h

非常小的旋轉(zhuǎn)鎖(1字節(jié)和1位)。

small_vector.h

一種向量,含有小緩沖器方面的優(yōu)化和可選的嵌入式PicoSpinLock。

sorted_vector_types.h

類似std::map的集合體,但是作為排序向量來(lái)實(shí)現(xiàn)。

StlAllocator.h

標(biāo)準(zhǔn)模板庫(kù)(STL分配器),包裝簡(jiǎn)單的分配/取消分配接口。

String.h

連接folly::fbstring和std::string的字符串實(shí)用組件。

Synchronized.h

高級(jí)同步庫(kù)。

System.h

解碼和errno實(shí)用組件。

ThreadCachedInt.h

使用線程緩存的高性能原子增量。

ThreadLocal.h

經(jīng)過(guò)改進(jìn)的線程本地存儲(chǔ),用于存儲(chǔ)非平凡類型。

TimeoutQueue.h

按項(xiàng)目設(shè)定超時(shí)的隊(duì)列。

Traits.h

類型特性,補(bǔ)充了在標(biāo)準(zhǔn)的C++11頭<traits>中定義的那些類型特性。

Unicode.h

定義了codePointToUtf8函數(shù)。

【編輯推薦】

  1. Facebook發(fā)布HTML 5應(yīng)用中心
  2. HTML 5平臺(tái)對(duì)于Facebook未來(lái)至關(guān)重要
  3. Facebook版《憤怒的小鳥》為何選用Flash
  4. 揭秘Google與Facebook開發(fā)之道
  5. 揭秘Facebook是如何開發(fā)軟件的
責(zé)任編輯:彭凡 來(lái)源: 51CTO
相關(guān)推薦

2012-06-05 09:39:16

Facebook

2012-06-27 14:04:22

folly

2021-06-11 10:53:40

Folly組件開發(fā)

2011-04-26 09:18:53

FacebookPHPmysql

2011-03-10 09:37:52

Facebook代碼

2010-01-27 17:16:52

C++構(gòu)造函數(shù)

2010-01-22 14:53:21

2010-01-26 10:42:26

C++函數(shù)

2010-01-18 16:56:30

C++函數(shù)

2010-01-28 13:35:41

調(diào)用C++函數(shù)

2010-01-19 13:43:59

C++函數(shù)

2011-06-17 16:09:04

freadfwrite

2010-02-01 11:22:09

C++虛函數(shù)

2023-12-13 10:51:49

C++函數(shù)模板編程

2010-01-19 14:28:41

C++ main()函

2023-11-28 11:51:01

C++函數(shù)

2022-07-18 15:32:37

C++虛函數(shù)表

2010-01-21 11:23:58

C++函數(shù)調(diào)用

2010-02-05 10:23:09

C++基本函數(shù)

2010-02-02 10:07:59

C++全局函數(shù)
點(diǎn)贊
收藏

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