//-------------- boost.bind --------------
#include
#include
#include
#include
#include
#include
#pragma hdrstop
//----------------------------------------
#pragma argsused
using namespacestd;
voidprint_sum(inta,intb)
classperson
voidprintinformation(void)
};intmain(intargc, char* argv)
;for_each(array, array + 4, boost::bind(&print_sum, _1, 100)); // (8)
// 例子2
:元素是以值的方式儲存的,
所以需要介面卡
men_fun_ref
vectorv2;
v2.push_back(person(string("person 1"), 25));
v2.push_back(person(string("person 2"), 24));
v2.push_back(person(string("person 3"), 23));
v2.push_back(person(string("person 4"), 22));
// 三者完成的任務相同
// 由於多次呼叫
v2.end()
使效率降低、**冗長
for(vector::iterator i = v2.begin(); i != v2.end(); ++i)
// 需要介面卡
men_fun_ref
來對v2
的元素成員呼叫成員函式
for_each(v2.begin(), v2.end(),mem_fun_ref(person::printinformation));
// 簡潔、清楚表達意圖
for_each(v2.begin(), v2.end(), bind(person::printinformation, _1));
// 例子
3:元素是以指標方式儲存的
, 需要介面卡
men_fun,
且需要顯式的刪除元素
vectorv3;
v3.push_back(newperson(string("person 1"), 25));
v3.push_back(newperson(string("person 2"), 24));
v3.push_back(newperson(string("person 3"), 23));
v3.push_back(newperson(string("person 4"), 22));
// 三者完成的任務相同
// 多次呼叫
v3.end()
使效率降低、**冗長
for(vector::iterator i = v3.begin(); i != v3.end(); ++i)
// 需要介面卡
men_fun
來對v3
的元素成員呼叫成員函式
for_each(v3.begin(), v3.end(), mem_fun(person::printinformation));
// 簡潔、清楚表達意圖
for_each(v3.begin(), v3.end(), bind(person::printinformation, _1));
// 顯式的刪除
v3元素
, 增加了**量
for(vector::iterator i = v3.begin(); i != v3.end(); ++i)
// 例子4:
vector> v4;
v4.push_back(boost::shared_ptr(newperson("person 1", 25)));
v4.push_back(boost::shared_ptr(newperson("person 1", 24)));
v4.push_back(boost::shared_ptr(newperson("person 1", 23)));
v4.push_back(boost::shared_ptr(newperson("person 1", 22)));
// 兩者完成的任務相同
// 多次呼叫
v4.end()
使效率降低、即使不需要手動刪除元素**依然冗長
for(vector>::iterator i = v4.begin();
i != v4.end(); ++i)
// 因為智慧型指標沒有成員函式
介面卡men_fun_ref
和men_fun
都不再適用
// 然而
boost::bind
仍可以簡潔、清楚的表達意圖
for_each(v4.begin(), v4.end(), bind(person::printinformation, _1));
system("pause");
return0;
}//-------------------------------
小結:不論採用的是值語義還是指標語義,用於繫結的語法是相同的,甚至在使用智慧型指標時也是相同的。有時候,使用不同的語法有助於**的理解,然而這裡情況就不同了——這裡的任務只是對容器中的元素呼叫成員函式。但不應該低估語法一致性的價值,它對於編寫**的人和日後維護**(假定需要維護)的人,都是有幫助的。儘管標準庫也提供了一些完成相同工作的基本工具,但我們看到
boost.bind
不僅提供了一致的語法,而且也增加了標準庫目前所缺少的功能。
強一致性 弱一致性 最終一致性
這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...
保證一致性嗎 Kafka的一致性保證
魚和熊掌不可兼得。系統設計需要根據具體的應用場景做出權衡。系統設計者可以通過配置kafka,來得到不同程度的需求滿足。每個kafka主題 topic 都分為多個分割槽 partitions 每個分割槽可以具有多個副本 replica 其中乙個副本是主分割槽 leader 所有讀寫請求都由主分割槽提供...
一致性雜湊
直接貼出一篇介紹的很清楚的博文。關鍵字一致性雜湊 平衡性,單調性,分散性,負載 其實說白了,就是解決把請求分散到不同的機器上運算,怎麼做分散的平均,機器少一台多一台,或者壞掉一台,成很好的自適應和拓展。最簡單的實現分布式演算法,取模嘛,但是它就上述的一些問題,所以不算好的雜湊函式。一致性雜湊演算法,...