Q : «Итак, должно ли количество процессов быть 8 или 16?»
Итак, должен ли стадия подпроцессов, распределенные рабочие нагрузки - это интенсивное повторное использование кеша (не ввод-вывод памяти), правило SpaceDOMAIN
-ограничений, поскольку размер кэшируемых данных будет играть кардинальную роль в решая, 8 или 16.
Почему?
Потому что затраты на ввод-вывод памяти примерно в тысячу раз дороже в TimeDOMAIN
, заплатив около 3xx - 4xx [ns]
на ввод / вывод памяти, по сравнению с 0.1 ~ 0.4 [ns]
для данных в кэше.
Как принять решение?
Сделайте небольшой тест, прежде чем принимать решение о конфигурации в производственном масштабе.
Итак, если стадо распределенных рабочих нагрузок связано с сетевым вводом-выводом или другими замечательными (локально не -сингулярный) источник задержки, в зависимости от TimeDOMAIN
может быть полезен трюк с маскировкой задержки, запускающий 16, 160 или просто 1600 потоков (не процессы в этом case).
Почему?
Потому что затраты на ввод-вывод по сети обеспечивают так, оооочень, оооочень много времени ожидания (несколько [ms]
задержки сетевого ввода-вывода RTT достаточно, чтобы сделать около 1E7 ~ 10.000.000
на муп-ы ядра ЦП, что довольно много работы, не так ли? Таким образом, может уместиться интеллектуальное чередование даже целых процессов, здесь также может использоваться только параллельная обработка на основе потоков с маской задержки (поскольку потоки, ожидающие удаленного «ответа» от сетевого ввода-вывода, не должны бороться за блокировку GIL, так как им нечего вычислять, пока они не получат свои ожидаемые байты ввода-вывода, не так ли?)
Как принять решение?
Просмотрите код, чтобы определить, сколько операций ввода-вывода по сети и сколько считываний размером с размер кэша имеется в игре (в 2020 / Q2 + L1-кеши выросли примерно до нескольких [MB]
-с). В тех случаях, когда эти операции повторяются много раз, не стесняйтесь увеличивать один поток для каждой «медленной» цели сетевого ввода-вывода, так как обработка выиграет от просто случайно созданного маскирования «длительного» ожидания. раз ценой всего лишь дешевого («быстрого») и (из-за «большого» и «длительного» времени ожидания) довольно редкого переключения потоков или даже планировщика процессов, управляемого O / S, отображающего полные подпроцессы на свободное ядро ЦП.
Таким образом, если стадо распределенных рабочих нагрузок представляет собой смесь вышеперечисленных случаев, нет другого способа, кроме экспериментов на реальном локальном / не- локальные ресурсы.
Почему?
Потому что не существует практического правила для точной настройки отображения обработки рабочей нагрузки на фактические ресурсы ядра ЦП.
Тем не менее,
можно легко обнаружить, что заплатив больше, чем когда-либо, возвращаясь
Известная ловушка
достижения SlowDown вместо (просто хотел получить ) SpeedUp
Во всех случаях строгие накладные расходы, потребности в ресурсах и атомарность рабочей нагрузки в соответствии с пересмотренным законом Амдала идентифицируют point-of-diminishing возвращает , после чего любые другие рабочие (CPU-core-s) не будут улучшать желаемое Ускорение . Многие сюрпризы получения S << 1 выражены в сообщениях StackOverflow, поэтому можно прочитать столько того, чего не следует делать (<strong> обучение с помощью анти-шаблонов ), сколько можно sh.