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的服务器的首选。其特点我们专门在下一小姐陈述。