首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PPL容器性能

PPL容器性能
EN

Stack Overflow用户
提问于 2013-06-18 01:17:12
回答 1查看 543关注 0票数 6

我正在编写一个服务器应用程序,它一次从多个来源获取数据,并将其存储在它的内部数据库(目前是一个std::set)中。

我刚刚研究了微软的ConcRT PPL数据结构,想知道与在std::unordered_set上使用细粒度互斥相比,它们的效率如何。例如,这两个代码片段之间是否存在很大的性能差异:

代码语言:javascript
复制
void StdWithMutex( void )
{
     std::ofstream outFile( "Test.tmp" );

     std::lock_guard<std::mutex> lockGuard( m_mutex );

     // Iterate through the data and write it to a file:
     // m_setData is of type std::unordered_set<DataType>
     for( auto data : m_setData )
     {
          outFile << data;
     }
}

和:

代码语言:javascript
复制
void ConcRT( void )
{
     std::ofstream outFile( "Test.tmp" );

     // Iterate through the data and write it to a file:
     // m_setData is of type concurrency::concurrent_unordered_set
     for( auto data : m_setData )
     {
          outFile << data;
     }
}

此外,我经常需要按顺序打印数据,这就是为什么我当前使用std::set而不是std::unordered_set的原因,所以如果使用concurrency::concurrent_unordered_set会带来收益,那么潜在的性能收益是否接近每次需要打印数据时重新排序数据的成本?

EN

回答 1

Stack Overflow用户

发布于 2013-09-02 05:29:35

是的,这有很大的不同。尝试运行100个线程并行写入和读取此容器,您将看到不同之处。

PPL容器不会锁定->,这样会更快(它可能也是在等待空闲,或者使用了一个改进的分配器,而STL不会,除非你指定了这个分配器)

在单线程环境中,虽然锁的开销可能比PPL容器的开销小。

(同理,TBB (英特尔)的coost或并发容器的并发队列将比可能全部锁定的STL容器更快)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17153171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档