Использование: C++ (MinGW)
, Qt4.7.4
, Vista (OS)
, intel core2vPro
CPU Cores не утилизируется должным образом с использованием объектов QThread
мне нужно обрабатывать 2 огромных файлов точно так же. Поэтому я хотел бы назвать процедуру обработки из двух отдельных потоков для двух отдельных файлов. Ничья GUI не делает ничего тяжелого; просто отображает метку и запускает цикл событий для проверки испускания условий завершения потока и соответственно выходит из основного приложения. Я ожидал, что это будет использовать два ядра (intel core2) несколько одинаково, но, наоборот, я вижу из диспетчера задач, что один из ядер сильно используется, а другой нет (хотя не каждый раз, когда я запускаю код); также время, затрачиваемое на обработку 2-х файлов, намного больше, чем время, затрачиваемое на обработку одного файла (я думал, что он должен быть равен или немного больше, но это почти равно обработке двух файлов один за другим в безпоточной заявление). Могу ли я каким-то образом заставить потоки использовать ядра, которые я указываю?
QThread* ptrThread1=new QThread;
QThread* ptrThread2=new QThread;
ProcessTimeConsuming* ptrPTC1=new ProcessTimeConsuming();
ProcessTimeConsuming* ptrPTC2=new ProcessTimeConsuming();
ptrPTC1->moveToThread(ptrThread1);
ptrPTC2->moveToThread(ptrThread2);
//make connections to specify what to do when processing ends, threads terminate etc
//display some label to give an idea that the code is in execution
ptrThread1->start();
ptrThread2->start(); //i want this thread to be executed in the core other than the one used above
ptrQApplication->exec(); //GUI event loop for label display and signal-slot monitoring
Являются ли файлы отдельными физическими жесткими дисками? Если вы пытаетесь вращать ржавчину, чтобы сразу читать два файла, вам нужно искать между ними каждый раз, когда другой поток назначается, и эта часть будет забивать все, что вы можете получить от CPU. –
Являются ли файлы примерно одинакового размера? – Tudor
@PeteKirkham: просто есть 1 HDD – ustulation