re: C++著名程序庫的比較和學習經驗 唐新發 2011-04-29 01:28
Google ProtoBuffers不可錯過:)
re: c++ web Kit簡介 唐新發 2010-10-26 02:15
以前看過一下,效果不錯,代碼寫起來很有c++ builder的感覺,不過還是沒有使用它,有兩點考慮:
1,協議是GPL的,感覺商用會有問題。
2,從來沒有覺得c++面向對象的方式能快速地設計出(web)界面,模板才是王道。
這年頭會用c++的估計不會去吃web開發這碗飯,不好吃也吃不好,所以不管從開發還是維護代價不小。
re: Win32 - 如何控制你的線程 唐新發 2009-11-29 13:47
線程里通常是要將這個事件和另一個事件工作(如:隊列不為空的事件)一起等待(WaitForMultipleObjects),否則就真不如用一個全局變量了。
下面的測試顯示shared_ptr相對于使用原始指針會慢上很多(2-4倍),主要是來自引用計數及其帶來的指針對象的創建銷毀時間,下面的測試代碼都是指針創建及傳遞操作:
#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 禁用優化的三次執行:
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 完全優化的三次執行:
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算是比較好的,提供多種格式,不過感覺因面面具到而弄得有點復雜,不能夠跨語言,序列化的面條式代碼要手寫,我對自動生成序列化代碼更感興趣,目前來看google的Protocol Buffer很不錯(類似的有facebook的Thrift)。
@Xw.Y
謝謝提醒。
原來內置的auto-insert就可以完成這個功能了。
哈哈,看來我得多熟悉熟悉emacs了。
一直在用,可當做是個粗糙版的vc使用,對wxWigets開發支持力度大,開發很活躍。
re: 完成端口(IOCP)編程探討 唐新發 2008-01-07 17:12
錯別字:小組不是小姐
第三、IOCP實現高并發的服務器。IOCP是實現high-scalabe的服務器的首選。其特點我們專門在下一小姐陳述。