EugeneRoshal
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Pasha_ZZZ Чтобы определить число доступных процессоров, WinRAR считает единицы в маске, возвращаемой GetProcessAffinityMask. Если количество процессоров превышает 64, предыдущие версии Windows делили их на processor groups, не более 64 в группе. Для работы с processor groups существует свое API, которым WinRAR не пользовался. Все равно 64 потока для RAR алгоритма это фактически предел, дальше рост производительности вряд ли будет сколько-нибудь заметным. Кроме того, у меня просто нет соответствующего железа с более чем 64 потоками для отладки работы с processor groups. Начиная с Windows 11 и Windows Server 2022, ситуация поменялась: https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getprocessaffinitymask "Starting with Windows 11 and Windows Server 2022, on a system with more than 64 processors, process and thread affinities span all processors in the system, across all processor groups, by default." Вроде как хорошо, приложению не надо заморачиваться с processor groups. Но возникает вопрос - как тогда узнать количество доступных процессоров. Пока что я сделал так - если доступна функция GetActiveProcessorCount(ALL_PROCESSOR_GROUPS) и она возвращает больше 64, используем ее значение. Правда, это будет без учета process affinity mask. Если она недоступна или возвращает меньше 64, считаем единицы в GetProcessAffinityMask. И в любом случае ограничиваем количество потоков 64, так как больше RAR сейчас использовать не умеет. Я выложил новую сборку бета 2 с этим изменением. Добавлено: insorg Цитата: Менять внутреннюю логику, считать и устанавливать размер словаря для каждого блока в отдельности ради не особо заметного выигрыша в расходе памяти. Цитата: Просто в нынешнем rar их получить достаточно сложно. | Те же -se и -s<N> добавить к командной строке недолго, но реально я не видел, чтобы ими пользовались. Обычно есть или -s, или его отсутствие. |