【发布时间】:2016-11-21 08:02:16
【问题描述】:
有一个函数必须运行很长时间。 假设该函数被多个线程调用。该函数有许多变量,其中大多数是 std::string。 有两种可能的方式来声明函数变量: 1-
void Test()
{
std::string s1; s1.reserve(500);
std::string s2; s2.reserve(500);
std::string s3; s3.reserve(500);
std::string s4; s4.reserve(500);
std::string s5; s5.reserve(500);
for(;;)
{
s1= Read_from_file();
s2= Read_from_file2();
s3= s1.substr(0,Snaplength);
s4= s2.substr(0,Snaplength);
s5= s1+ s2;
.
.
.
}
}
2-
for(;;)
{
std::string s1= Read_from_file();
std::string s2= Read_from_file2();
std::string s3= s1.substr(0,Snaplength);
std::string s4= s2.substr(0,Snaplength);
.
.
.
}
}
如前所述,函数必须运行很长时间。
当我需要通过多个线程调用我的函数时,哪种方式在时间复杂度方面更好?
[添加:] 假设我需要调用我的函数 1000000 次,并希望尽可能快地完成它。一种可能的方法是通过多个线程运行该函数,但是 Afaik 并不总是可以通过多个线程运行该函数来获得更好的性能。在哪种情况下添加线程可能会更快?
操作系统= GNU/Linux
【问题讨论】:
-
如果您使用的是 C++11,几乎可以肯定是第二个。
-
局部变量不在线程之间共享,所以我不明白你在问什么。
标签: c++ multithreading operating-system