Имеет смысл порождать больше чем один поток на процессор?

Вот как ваше выражение читается с точки зрения компьютера.

[(0 if N < 2 else val * 2) for val in range(0, N // 2)]

Таким образом, бит for происходит первым. И если N меньше, чем 2, то range(0, N // 2) пусто, поэтому бит 0 if N < 2 else val * 2 фактически никогда не выполняется.

В вашем случае, было бы более разумно просто иметь два разных случая.

if N < 2:
  return [0]
else:
  return [val * 2 for val in range(0, N // 2)]

Или, если хотите, в одну строку,

[0] if N < 2 else [val * 2 for val in range(0, N // 2)]
8
задан Trap 2 February 2009 в 15:39
поделиться

8 ответов

Конечно. Если Ваше программное обеспечение делает частое использование диска или сети IO, можно часто улучшать пропускную способность путем добавления еще нескольких потоков. Те дополнительные потоки будут бодрствовать и выполнение материала, в то время как другие потоки блокируются на IO.

23
ответ дан 5 December 2019 в 04:31
поделиться

Другой говорили о ситуациях, в которых это почти наверняка имеет смысл (при выполнении любого довольно медленного IO).

Это не могла бы быть хорошая идея если:

  • Ваши потоки делают зависящую от ЦП работу

и

  • потоки каждый хочет использовать много (т.е. значительный по сравнению с размером кэша) памяти, которая не накладывается

В этом случае существует возможность порождения ненужных неудачных обращений в кэш.

12
ответ дан 5 December 2019 в 04:31
поделиться

Это может иметь смысл если

  1. Ваши преимущества проектирования программы, в этом, у Вас есть параллельные задачи, которые лучше всего реализованы в потоках, или

  2. некоторые Ваши потоки являются I/O-bound, таким образом, они не используют процессоры,/cores самостоятельно.

6
ответ дан 5 December 2019 в 04:31
поделиться

Короткий ответ - "да".

Даже мысль, Вы могли получить больше от многопоточности на многопроцессорной системе environement, это - все еще полезная технология на единственной машине процессора, главным образом потому что это означает делегирование некоторой работы к планировщику процесса у кого должна быть намного лучшая информация, чем Вы имеете.

Если Вы не мультираспараллелите, то Вы закончите тем, что делали задание планирования сами, которое могло быть хорошей вещью, если это - то, в чем Вы нуждаетесь, но по всей вероятности будете и утомительны и неэффективны

4
ответ дан 5 December 2019 в 04:31
поделиться

Каждый раз у Вас есть задача, ожидающая операции ввода-вывода, действительно имеет смысл включать его в поток и разжигать его. Существует большая вероятность, что Ваш поток будет приостановлен при ожидании операции ввода-вывода для окончания. Когда это добирается, просыпаются, результат будет ожидать его.

3
ответ дан 5 December 2019 в 04:31
поделиться

Поскольку вся современная ОС является много управлением задачами: каждый поток получает долю времени от процессора. Это не на самом деле параллельное выполнение, но, учитывая процессор может обработать тысячи запросов в секунду, это - "очевидное" параллельное выполнение.

Таким образом да, если случаю нужно, действительно имеет смысл мультираспараллеливать на единственном процессоре.

2
ответ дан 5 December 2019 в 04:31
поделиться

Одно из преимуществ - при обновлении аппаратных средств которые, вероятно, получат больше процессоров/ядер.

3
ответ дан 5 December 2019 в 04:31
поделиться

Я нашел, что при записи синтаксических анализаторов данных, которые обрабатывают большие наборы данных по сети, лучше создавать поток для каждой буквы алфавита (имеющий отношение к данным) и заставлять программу быть большим количеством ЦП и связанной памяти. Ограниченность ввода-вывода наследовалась с сетевыми и дисковыми операциями, главное узкое место, таким образом, можно также "начать" на других файлах данных вместо того, чтобы делать работу последовательно.

На четырехъядерном, конечно, имело бы смысл запускать больше чем четыре потока. Маловероятно, что те 4 потока были бы распространены через больше чем одно из ядер, особенно с сегодняшними скоростями процессора.

1
ответ дан 5 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: