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

Facebook folly代碼庫學(xué)習(xí)心得

開發(fā) 后端
folly最大的不足就是需要C++11的新特性,需要gcc4.6以上的編譯器方能使用。不過從實際工作中看,就不要指望folly能夠大大降低工作量了。

學(xué)習(xí)代碼庫的一般步驟

1) 編譯安裝;

2) 學(xué)習(xí)doc/manual文檔;

3) 學(xué)習(xí)test用例;

4) 測試并使用。

folly庫的學(xué)習(xí)心得

獨立有用的小技巧

Eventfd.h ---- 針對eventfd系統(tǒng)調(diào)用的包裝器。

Foreach.h ---- 偽語句(作為宏語句來實現(xiàn)),用于迭代。

IntrusiveList.h --- 方便類型定義,用于使用boost::intrusive_list(不知道干什么的)。

Likely.h ---- 針對__builtin_expect的包裝器。分支預(yù)測編譯加速。

Malloc.h ---- 內(nèi)存分配助手,尤其是使用jemalloc時。

MapUtil.h ---- 用于查找聯(lián)合容器的小工具,找不到返回默認(rèn)值。(比如std::map和std::unordered_map)。

Preprocessor.h ---- 獲取可變參數(shù)的第1個或第2個參數(shù),用于模板編程!Synchronized.h的實現(xiàn)就靠這個!

ScopeGuard.h ---- Basically, it guarantees that a function is executed upon leaving the currrent scope unless otherwise told. 即確保資源能夠被正確析構(gòu)(調(diào)用資源析構(gòu)函數(shù))。

StlAllocator.h ---- STL分配器,包裝簡單的分配/取消分配接口。貌似為了低版本gcc。

Traits.h ---- 類型特性。用于判斷類型是否可直接內(nèi)存拷貝(可重定位的對象)。C++假定所有的對象都是“non-relocatable values”(需要調(diào)用構(gòu)造函數(shù)而不能直接拷貝內(nèi)存數(shù)據(jù))。實際中,很多C++對象可通過直接拷貝內(nèi)存數(shù)據(jù)完成對象"再造"!(Relocatable object/type -- 可重定位的對象/類型)。Traits.h的核心就是提供"可重定位的類型"編譯時判斷工具。FBvector的核心優(yōu)化之一:利用memcpy/memmove來處理"可重定位的類型"!

C++功能增強和擴展

FBString.h ---- std::string性能優(yōu)化版本。

FBvector.h ---- std::vector性能優(yōu)化版本。

Bits.h ---- 各種位處理實用組件,針對速度而優(yōu)化。

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

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

Dynamic.h ---- 動態(tài)類型對象,類似boost::variant。用于json.h。

Format.h ---- Python式樣的格式化實用組件。C++功能增強和擴展的集大成者,基本上用到了上述的各個頭文件!

Range.h ---- 類Boost的隨機訪問數(shù)據(jù)包裝類,針對StringPiece的定制版本。

String.h ---- 非常有用的string工具集合:std::string <=> FBstring 互轉(zhuǎn)工具、C風(fēng)格轉(zhuǎn)義字符串工具(反轉(zhuǎn)工具)、stringPrintf工具、prettyPrint(支持時間、容量等常見單位)、hexDump工具、errnoStr\exceptionStr、demangle(串化C++類型)、split(分拆字符串)。

Unicode.h ---- 定義了codePointToUtf8函數(shù)。實現(xiàn)unicode碼點到utf-8編碼的轉(zhuǎn)換。

簡化多線程編程

Arena.h,ThreadCachedArena.h ---- 內(nèi)存分配的簡單地方:多次內(nèi)存分配同時被釋放。使用線程版本。簡化內(nèi)存管理,相當(dāng)于java的gc(垃圾回收機制)。

AtomicHashMap.h,AtomicHashArray.h ---- 高性能的原子哈希圖,采用幾乎無鎖的操作。

ProducerConsumerQueue.h ---- 單生產(chǎn)者單消費者隊列。

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

Synchronized.h ---- 提供一種非常好的多線程同步編碼范式!!!請直接看doc和測試代碼!

ThreadLocal.h ---- 改進的線程本地存儲,用于存儲非內(nèi)置類型。取代pthread_key_t。

ThreadCachedInt.h ---- 使用線程緩存的高性能原子增量。

獨立組件

Hash.h ---- 各種流行的哈希函數(shù)實現(xiàn)。

GroupVarint.h ---- 針對32位值的Group Varint編碼。

Histogram.h  ---- 用于收集直方圖數(shù)據(jù)。

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

Random.h ---- 只定義了一個函數(shù):randomNumberSeed()。使用當(dāng)前時間和PID來產(chǎn)生隨機數(shù)種子。

TimeoutQueue.h ---- 定時器隊列。按項目設(shè)定超時的隊列。

就是為了性能

PackedSyncPtr.h ---- 一種高度專業(yè)化的數(shù)據(jù)結(jié)構(gòu),含有指針、1位旋轉(zhuǎn)鎖和15位整數(shù),它們都在一個64位整型數(shù)中。目標(biāo):節(jié)約空間(當(dāng)前64位機的指針高16位未用)。用到SmallLocks。

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

small_vector.h ---- 含有小緩沖器方面的優(yōu)化vector,策略可選:NoHeap、OneBitMutex。

sorted_vector_types.h ---- 類似std::map的集合體,但是作為排序向量來實現(xiàn)。適用:數(shù)量少。目的:節(jié)約空間。

總結(jié)

folly***的不足就是需要C++11的新特性,需要gcc4.6以上的編譯器方能使用。若是從學(xué)習(xí)的角度去看,folly有很多小技巧可學(xué)習(xí);若從實用的角度看,folly能夠極大地方便多線程編程;若從性能角度看,folly對不少C++功能做了增強和擴展。總之,folly是一個很不錯的C++庫。就沖著Andrei Alexandrescu的大名也看學(xué)習(xí)學(xué)習(xí)。不過從實際工作中看,就不要指望folly能夠大大降低工作量了 ^_^。

olly自帶的doc和源碼

揭秘Facebook官方底層C++函數(shù)Folly(docs/Overview.md翻譯)

原文鏈接:http://www.cnblogs.com/zhenjing/archive/2012/06/27/folly_research.html

【編輯推薦】

  1. Facebook發(fā)布HTML 5應(yīng)用中心
  2. HTML 5平臺對于Facebook未來至關(guān)重要
  3. Facebook版《憤怒的小鳥》為何選用Flash
  4. 揭秘Google與Facebook開發(fā)之道
  5. 揭秘Facebook是如何開發(fā)軟件的

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-09-17 13:38:42

LINQ to XML

2011-04-06 11:08:52

Java異常

2012-06-05 09:39:16

Facebook

2012-06-05 09:12:02

FacebookFolly

2009-11-06 17:31:03

Oracle密碼文件

2009-06-23 09:05:10

Seam框架JSF

2009-12-22 15:49:50

Linux系統(tǒng)文件鎖

2009-08-18 10:59:46

C#枚舉類型

2011-01-04 09:34:23

LambdaC#

2009-09-14 18:19:49

LINQ模糊查詢

2021-06-11 10:53:40

Folly組件開發(fā)

2009-09-10 16:35:06

CCNA考試培訓(xùn)

2009-07-15 18:11:17

MVC模式學(xué)習(xí)

2009-08-13 18:10:31

C#靜態(tài)構(gòu)造函數(shù)

2010-06-17 18:31:12

繪制UML序列圖

2020-07-24 12:30:58

AI 數(shù)據(jù)人工智能

2011-03-10 09:37:52

Facebook代碼

2011-04-08 17:22:39

2009-12-17 16:18:00

CCNP考試心得

2011-01-19 10:13:20

FaceBook代碼業(yè)界
點贊
收藏

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

主站蜘蛛池模板: 午夜影院 | a级片在线| 国产视频一区二区 | 亚洲视频中文字幕 | 精品日韩一区二区 | 夜夜爽99久久国产综合精品女不卡 | 精品久久久久久久久久久 | 国产一区久久久 | 国产美女h视频 | 久久99精品久久久久久青青日本 | 亚洲电影中文字幕 | 在线成人免费视频 | 日韩精品1区2区3区 爱爱综合网 | 精品永久 | 色橹橹欧美在线观看视频高清 | 国产精品福利视频 | 日本黄色不卡视频 | 国产激情在线观看 | 欧美中文 | 日韩一区二区三区在线观看 | 欧美a在线 | 久久99精品久久久久久 | 二区av| 欧美精品网站 | 国产高清精品在线 | 精品久久精品 | 国产一级在线 | 五月婷婷 六月丁香 | 男人的天堂一级片 | 777zyz色资源站在线观看 | 免费欧美视频 | 91久久精品一区二区二区 | 日本精品一区二区三区在线观看 | 国产成人精品一区二区 | 久久国产成人精品国产成人亚洲 | 久久久久久成人 | 国产精品无码久久久久 | 久久久久久久97 | 亚洲精品视频在线观看视频 | 久草在线视频中文 | avhd101在线成人播放 |