Отбор тысячи потоков

Есть ли какое-либо различие для ЦП, загружающегося между отбором один большой поток (более чем 20 ГБ) и 2000 потоков 20 МБ?

6
задан 05.08.2012, 20:08

5 ответов

Если Ваш клиент может обработать те много потоков, я не ожидал бы, что использование ЦП будет отличаться так очень, потому что большая часть включенной работы является диском и сетью I/O. Практически, Вы могли бы столкнуться с трудностями при поддержании столько (тысячи) сетевых соединений с другими клиентами.

6
ответ дан 07.12.2019, 15:28

Если можно отобрать, как один поток, то лучше сделать просто это, чем создание 2 000 потоков.

С 2 000 потоков у Вас будет большой служебный случай:

  • Ваш процессор должен вычислить больше, он должен сделать дополнительный материал 2000 раз вместо однажды.
    Это должно будет также переключиться между потоками намного больше, снова вызывая наверху.

  • Ваша память будет иметь много издержек, все служебные данные для карт файлов подводят итог много.

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

  • Ваша сеть I/O будет иметь много издержек, намного больше соединений, чем необходимый подготовлено.
    Ваш компьютер, вероятно, не сможет обработать все эти дополнительные соединения,
    или можно установить меньше соединений, которые заставили бы его быть неэффективным.

Так, или сделайте один поток или разделите его в некоторых потоках, но не создавайте 2000 их...

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

О, другая подсказка: Если Ваш ЦП и диск достаточно быстры, Вы могли бы хотеть сжать вещи сначала... ;-)

8
ответ дан 07.12.2019, 15:28

При попытке отобрать 2 000 потоков внезапно, то Вы захотите смотреть к пределам в Ваших соединениях порождения стека TCP со сбоем - большинство ядер любого вида имеет своего рода предел на количество параллельных соединений TCP, если Вы захотите попробовать отбор 2 000 потоков, то Вы захотите удостовериться, что Вы знаете, как корректироваться, сказал что пределы на Вашу систему.

3
ответ дан 07.12.2019, 15:28

Для каждого потока, который является отбором, Ваш компьютер должен поддержать

  • несколько сетевых соединений - обычно 5-50, по моему опыту,
  • карта частей потока
  • запись того, как далеко через поток каждый связанный клиент
  • возможно другой материал...

Выполнение всего этого берет немного памяти для горстки потоков. Для 1 000 это будет огромным объемом памяти.

Другое основное отличие находится в общем количестве частей для отслеживания. Поток на 20 ГБ будет иметь намного большие части, чем поток 20 МБ. Позволяет говорят, что поток на 20 ГБ имеет 1 000 частей, и поток 20 МБ имеет 100 частей. Затем общее количество частей будет 1000 для потока на 20 ГБ, и 100,000 для потоков 20 МБ. Ваш сервер потока будет использовать определенное количество памяти для каждой части, таким образом, для этой части потоки 20 МБ будут использовать 100x память.

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

2
ответ дан 07.12.2019, 15:28

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

1
ответ дан 07.12.2019, 15:28

Теги

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