多线程导致变慢
Multithreading result into slower
之前基本上没有做过多线程编程。从概念上讲,我知道它。
因此开始使用一些带有随机数生成的编码。代码正在运行,但它产生的结果比单线程程序慢。所以想知道我代码中的漏洞以及如何提高性能。
因此,如果我尝试使用单线程和 10 个线程(或 5 个线程)随机生成 1-1500 个数字。单线程执行得更快。线程切换或锁定似乎需要时间。那么如何处理呢?
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 (" %d\t", result);
randcount++;
}
pthread_mutex_unlock (&map_lock);
}
}
由于您的大部分代码会阻塞所有并行线程(因为在 pthread_mutex_lock (&map_lock); 和 [=14= 之间]pthread_mutex_unlock (&map_lock); 块),您的代码的工作方式就像 运行 顺序一样,只是并行化的开销。
提示:尝试仅在您的线程中收集结果,然后将它们传回将显示它们的主线程。此外,如果您不并行访问您的集合,而是从每个线程传回部分列表,您就不必处理并发性减慢代码的问题。
之前基本上没有做过多线程编程。从概念上讲,我知道它。
因此开始使用一些带有随机数生成的编码。代码正在运行,但它产生的结果比单线程程序慢。所以想知道我代码中的漏洞以及如何提高性能。
因此,如果我尝试使用单线程和 10 个线程(或 5 个线程)随机生成 1-1500 个数字。单线程执行得更快。线程切换或锁定似乎需要时间。那么如何处理呢?
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 (" %d\t", result);
randcount++;
}
pthread_mutex_unlock (&map_lock);
}
}
由于您的大部分代码会阻塞所有并行线程(因为在 pthread_mutex_lock (&map_lock); 和 [=14= 之间]pthread_mutex_unlock (&map_lock); 块),您的代码的工作方式就像 运行 顺序一样,只是并行化的开销。
提示:尝试仅在您的线程中收集结果,然后将它们传回将显示它们的主线程。此外,如果您不并行访问您的集合,而是从每个线程传回部分列表,您就不必处理并发性减慢代码的问题。