1) Если у меня производится чтение большого текстового файла, имеет ли смысл раздельть потоки на чтение и парсинг?
Практически нет.
2) Имеется большое количество данных, которое необходимо обработать по одному и тому же алгоритму, предположим проверка на >0 с последующим внесением таких чисел в вектор. Что лучше использовать при работе с 4 потоками: QAtomicInteger или разделить массив на 4 части и передать каждому потоку?
Здесь упирается в "предположим". Если это такое действие как > 0, то "выйгрыш" очень мал (если вообще есть), игра не стоит свеч.
ОС сам распределяет нагрузку, Вас не должно волновать какое ядро свободно и какие задачи еще выполняются. Потоки всегдв прыгают между ядрами, чтобы закрепить поток за ядром надо сильно постараться (и то не на всех ОС). Важно чтобы "кластер" (то что поручается 1 нитке) был достаточно велик, дать нитке следующую задачу всегда достаточно накладно, поэтому при малых задачах получается "пройгрыш" - все уходит в переключения