Google ProtoBuffers不可錯過:)
re: c++ web Kit簡介 唐新發(fā) 2010-10-26 02:15
以前看過一下,效果不錯,代碼寫起來很有c++ builder的感覺,不過還是沒有使用它,有兩點考慮:
1,協(xié)議是GPL的,感覺商用會有問題。
2,從來沒有覺得c++面向?qū)ο蟮姆绞侥芸焖俚卦O(shè)計出(web)界面,模板才是王道。
這年頭會用c++的估計不會去吃web開發(fā)這碗飯,不好吃也吃不好,所以不管從開發(fā)還是維護代價不小。
re: Win32 - 如何控制你的線程 唐新發(fā) 2009-11-29 13:47
線程里通常是要將這個事件和另一個事件工作(如:隊列不為空的事件)一起等待(WaitForMultipleObjects),否則就真不如用一個全局變量了。
下面的測試顯示shared_ptr相對于使用原始指針會慢上很多(2-4倍),主要是來自引用計數(shù)及其帶來的指針對象的創(chuàng)建銷毀時間,下面的測試代碼都是指針創(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這種東西,高效、自動序列化代碼生成、跨語言。
序列化方面boost.serialize算是比較好的,提供多種格式,不過感覺因面面具到而弄得有點復(fù)雜,不能夠跨語言,序列化的面條式代碼要手寫,我對自動生成序列化代碼更感興趣,目前來看google的Protocol Buffer很不錯(類似的有facebook的Thrift)。
re: 基于C++的模版引擎 唐新發(fā) 2008-09-22 11:58
還有一個可以考慮一下:ClearSilver
@Xw.Y
謝謝提醒。
原來內(nèi)置的auto-insert就可以完成這個功能了。
哈哈,看來我得多熟悉熟悉emacs了。
在理有據(jù),一直在各種風(fēng)格間搖擺的偶找到明燈了。
一直在用,可當(dāng)做是個粗糙版的vc使用,對wxWigets開發(fā)支持力度大,開發(fā)很活躍。
re: 完成端口(IOCP)編程探討 唐新發(fā) 2008-01-07 17:12
錯別字:小組不是小姐
第三、IOCP實現(xiàn)高并發(fā)的服務(wù)器。IOCP是實現(xiàn)high-scalabe的服務(wù)器的首選。其特點我們專門在下一小姐陳述。