Google ProtoBuffers不可錯(cuò)過:)
re: c++ web Kit簡介 唐新發(fā) 2010-10-26 02:15
以前看過一下,效果不錯(cuò),代碼寫起來很有c++ builder的感覺,不過還是沒有使用它,有兩點(diǎn)考慮:
1,協(xié)議是GPL的,感覺商用會(huì)有問題。
2,從來沒有覺得c++面向?qū)ο蟮姆绞侥芸焖俚卦O(shè)計(jì)出(web)界面,模板才是王道。
這年頭會(huì)用c++的估計(jì)不會(huì)去吃web開發(fā)這碗飯,不好吃也吃不好,所以不管從開發(fā)還是維護(hù)代價(jià)不小。
re: Win32 - 如何控制你的線程 唐新發(fā) 2009-11-29 13:47
線程里通常是要將這個(gè)事件和另一個(gè)事件工作(如:隊(duì)列不為空的事件)一起等待(WaitForMultipleObjects),否則就真不如用一個(gè)全局變量了。
下面的測試顯示shared_ptr相對(duì)于使用原始指針會(huì)慢上很多(2-4倍),主要是來自引用計(jì)數(shù)及其帶來的指針對(duì)象的創(chuàng)建銷毀時(shí)間,下面的測試代碼都是指針創(chuàng)建及傳遞操作:
#include <windows.h>
#include <cassert>
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>
typedef int type;
typedef type* raw_ptr_type;
typedef boost::shared_ptr<type> shared_ptr_type;
template<typename T>
void use(T ptr)
{
T ptr1 = ptr;
T ptr2 = ptr;
T ptr3 = ptr;
}
int main(int argc, char* argv[])
{
size_t count = 500000;
if(argc > 1)
count = atoi(argv[1]);
DWORD oldtime, shared_ptr_time, raw_ptr_time;
{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
raw_ptr_type ptr(new type);
use(ptr);
delete ptr;
}
raw_ptr_time = GetTickCount() - oldtime;
}
{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
shared_ptr_type ptr(new type);
use(ptr);
}
shared_ptr_time = GetTickCount() - oldtime;
}
assert(raw_ptr_time <= shared_ptr_time);
std::cout << "count(" << count << ") raw_ptr(" << raw_ptr_time << " ms) shared_ptr(" << shared_ptr_time << " ms) diff(+" << shared_ptr_time - raw_ptr_time << " ms, +" << double(shared_ptr_time - raw_ptr_time)/double(raw_ptr_time)*100 << "%)"<< std::endl;
return EXIT_SUCCESS;
}
vc2008下 Release 禁用優(yōu)化的三次執(zhí)行:
count(500000) raw_ptr(110 ms) shared_ptr(591 ms) diff(+481 ms, +437.273%)
count(500000) raw_ptr(110 ms) shared_ptr(471 ms) diff(+361 ms, +328.182%)
count(500000) raw_ptr(120 ms) shared_ptr(471 ms) diff(+351 ms, +292.5%)
vc2008下 Release 完全優(yōu)化的三次執(zhí)行:
count(500000) raw_ptr(111 ms) shared_ptr(330 ms) diff(+219 ms, +197.297%)
count(500000) raw_ptr(100 ms) shared_ptr(331 ms) diff(+231 ms, +231%)
count(500000) raw_ptr(110 ms) shared_ptr(351 ms) diff(+241 ms, +219.091%)
我也看好Protocol Buffer這種東西,高效、自動(dòng)序列化代碼生成、跨語言。
序列化方面boost.serialize算是比較好的,提供多種格式,不過感覺因面面具到而弄得有點(diǎn)復(fù)雜,不能夠跨語言,序列化的面條式代碼要手寫,我對(duì)自動(dòng)生成序列化代碼更感興趣,目前來看google的Protocol Buffer很不錯(cuò)(類似的有facebook的Thrift)。
re: 基于C++的模版引擎 唐新發(fā) 2008-09-22 11:58
還有一個(gè)可以考慮一下:ClearSilver
@Xw.Y
謝謝提醒。
原來內(nèi)置的auto-insert就可以完成這個(gè)功能了。
哈哈,看來我得多熟悉熟悉emacs了。
在理有據(jù),一直在各種風(fēng)格間搖擺的偶找到明燈了。
一直在用,可當(dāng)做是個(gè)粗糙版的vc使用,對(duì)wxWigets開發(fā)支持力度大,開發(fā)很活躍。
re: 完成端口(IOCP)編程探討 唐新發(fā) 2008-01-07 17:12
錯(cuò)別字:小組不是小姐
第三、IOCP實(shí)現(xiàn)高并發(fā)的服務(wù)器。IOCP是實(shí)現(xiàn)high-scalabe的服務(wù)器的首選。其特點(diǎn)我們專門在下一小姐陳述。