C ++ - 处理字符串的最佳线程数[关闭]

Posted

技术标签:

【中文标题】C ++ - 处理字符串的最佳线程数[关闭]【英文标题】:C++ - Optimal number of threads for processing string [closed] 【发布时间】:2015-08-25 06:07:18 【问题描述】:

我有一个长度为 N 的 std::string,我想使用线程将长度为 K 的所有子字符串插入到 std::set 容器中。我应该使用多少个 std::thread 或 pthread_t 对象?

考虑 N = 500,000 和 K = 3。

【问题讨论】:

可能与您拥有的内核一样多...但是如果您滥用多线程,它实际上会减慢您的程序(在最好的情况下),所以我建议您要么学习很多,要么坚持只要您没有充分的理由使用线程,就可以使用单个线程。 如果你想要最佳效率,可能是1。 在写信给std::set 时,您打算使用什么锁定方法?你知道std::set 不是线程安全的吗?您希望多久找到一次重复的子字符串? 我的目标是找出重复字符串出现的次数,在多线程环境中,超过 100 个不同的随机字符串。 @ChrisDrew - 我不知道 std::set 不是线程安全的。 【参考方案1】:

使用ThreadPool。

使用起来非常简单,您只需要include "ThreadPool.h",您就可以根据可用的内核数设置最大线程数。您的代码应包含以下片段。

 int max_threads = std::thread::hardware_concurrency();
 ThreadPool pool(max_threads);
 auto result = pool.enqueue(func,params); 

这里func是要调用的函数,params是参数,返回的值会存储在result中。

【讨论】:

以上是关于C ++ - 处理字符串的最佳线程数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

关于函数返回的字符指针的最佳实践[关闭]

Tomcat主要配置项-请求处理相关

处理查询字符串的最佳方法[关闭]

如何在C中使用pthread_join来控制线程数?

如何为超线程/多核选择最佳线程数?

Java并发计算线程池最佳线程数