我有一个用 C 编写的库,我有 2 个用 C++ 和 C 编写的应用程序。这个库是一个通信库,所以其中一个 API 调用如下所示:
int source_send( source_t* source, const char* data );
在 C 应用程序中,代码执行如下操作:
source_t* source = source_create();
for( int i = 0; i < count; ++i )
source_send( source, "test" );
C++ 应用程序在哪里执行此操作:
struct Source
{
Source()
{
_source = source_create();
}
bool send( const std::string& data )
{
source_send( _source, data.c_str() );
}
source_t* _source;
};
int main()
{
Source* source = new Source();
for( int i = 0; i < count; ++i )
source->send( "test" );
}
在英特尔酷睿 i7 上,C++ 代码每秒产生的消息几乎正好多出 50%。而在英特尔酷睿 2 Duo 上,它每秒产生的消息数量几乎完全相同。(核心 i7 有 4 个核心,每个核心有 2 个处理线程)
我很好奇硬件执行了什么样的魔法来实现这一目标。我有一些理论,但我想我会得到一个真正的答案:)
编辑:来自评论的附加信息
编译器是visual C++,所以这是一个windows box(两者都是)
通信库的实现创建了一个新线程来发送消息。source_create 是创建此线程的原因。