我有一个非常耗费资源的代码,所以我可以将工作负载分割为多个pthread。尽管一切正常,但计算速度更快等。我猜测发生的情况是该处理器内核上的其他进程变得非常缓慢,以至于在运行几秒后它们会崩溃。资源密集型多线程查杀其他进程
我已经设法杀掉Chrome选项卡,Cinnamon DE甚至整个OS(内核?)等随机进程。
代码:(它很晚了,我太累了,不能做一个伪代码,甚至评论..) - 但它是一个暴力破解代码,而不是破解,但测试密码和或CPU IPS。
任何想法如何解决这个问题,同时仍然保持尽可能多的性能?
static unsigned int NTHREADS = std::thread::hardware_concurrency();
static int THREAD_COMPLETE = -1;
static std::string PASSWORD = "";
static std::string CHARS;
static std::mutex MUTEX;
void *find_seq(void *arg_0)
{
unsigned int _arg_0 = *((unsigned int *) arg_0);
std::string *str_CURRENT = new std::string(" ");
while (true)
{
for (unsigned int loop_0 = _arg_0; loop_0 < CHARS.length() - 1; loop_0 += NTHREADS)
{
str_CURRENT->back() = CHARS[loop_0];
if (*str_CURRENT == PASSWORD)
{
THREAD_COMPLETE = _arg_0;
return (void *) str_CURRENT;
}
}
str_CURRENT->back() = CHARS.back();
for (int loop_1 = (str_CURRENT->length() - 1); loop_1 >= 0; loop_1--)
{
if (str_CURRENT->at(loop_1) == CHARS.back())
{
if (loop_1 == 0)
str_CURRENT->assign(str_CURRENT->length() + 1, CHARS.front());
else
{
str_CURRENT->at(loop_1) = CHARS.front();
str_CURRENT->at(loop_1 - 1) = CHARS[CHARS.find(str_CURRENT->at(loop_1 - 1)) + 1];
}
}
}
};
}
您所描述的症状是那些内存不足的情况引起的内存或资源泄漏,调用[OOM杀手(https://开头WWW .memset.com/docs/additional-information/oom-killer /) – kfsone
@kfsone听起来很可能,但应用程序最多使用20MB,而Valgrind报告如下:可能丢失:14个块中的2,223字节&&仍然可达:56字节在7个街区。当然,我会尝试解决一些泄漏问题,但有时Valgrind会提供无害的数据。 – areuz
一个耗费CPU的进程不应该会导致其他进程崩溃。它会降低速度,但由于硬件故障或内核错误,只能使它们崩溃。 –