多线程导致速度变慢
Multithreading result into slower
基本上我以前没有做过多线程编程。从概念上讲,我知道它。
所以开始与随机数生成一些什么编码。代码是工作的,但它产生的结果比单线程程序慢。所以想知道在我的代码漏洞和如何提高性能。
所以如果我尝试随机生成1-1500个数字,使用单线程和10个线程(或5个线程)。单线程执行速度更快。线程切换或锁定似乎需要时间。那么该如何处理呢?
pthread_mutex_t map_lock;
std::set<int> numSet;
int randcount=0;
static void *thread_fun (void *arg)
{
int randNum= *(int *)arg;
int result;
std::set<int> findItr;
while (randcount != randNum -1 ) {
result = rand ()%randNum;
if (result == 0) continue;
pthread_mutex_lock (&map_lock);
const bool is_in = (numSet.find (result) != numSet.end ());
if (!is_in)
{
numSet.insert (result);
printf (" %dt", result);
randcount++;
}
pthread_mutex_unlock (&map_lock);
}
}
由于您的大部分代码阻塞了所有并行线程(因为在pthread_mutex_lock (&map_lock);和pthread_mutex_unlock (&map_lock);块之间),因此您的代码工作起来就像顺序运行一样,只是并行化的开销。
提示:尽量只在你的线程中收集结果,然后将它们传递回主线程,主线程将显示它们。此外,如果你不并行访问你的集合,而是从每个线程传回部分列表,你不必处理并发减慢你的代码。
相关文章:
- 在C++中使用cURL和多线程
- 多线程双缓冲区
- 为什么我的多线程作业队列崩溃
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 为什么一个向量上的多线程操作很慢
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 全局变量 多读取器 一个写入器多线程安全?
- boost::文件系统::recursive_directory_iterator多线程安全
- 如何阻止TensorFlow的多线程
- 如何在多线程中正确使用unique_ptr进行多态性?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 具有`k`线程的多线程程序的运行速度都比其顺序版本快
- 多线程不会改变速度
- c++中的多线程递归函数,已编辑.使用OpenMP的速度比以前慢
- C++ 多线程处理速度慢
- TCLAP使多线程程序速度变慢
- Android NDK -多线程正在减慢渲染速度
- 多线程导致速度变慢