Сколько потоков можно запустить при использовании процессора Intel Core Duo для ускорения массовой загрузки данных из Amazon S3 в специальном приложении?

378
briennakh

Как я могу узнать максимальное количество потоков, которые я могу использовать? Я новичок в программировании, поэтому я пытаюсь понять, что мне нужно знать. У меня есть 950 ГБ файлов для загрузки с Amazon S3. Я думал, что смогу использовать два потока, каждый из которых загружает половину этой суммы, работая параллельно.

Я надеюсь ускорить массовую загрузку данных из Amazon S3 путем многопоточности моего приложения, но было бы хорошо сначала узнать, поддерживает ли мой компьютер даже многопоточность.

Спецификации компьютера:

  • Модель: MacBook (13 дюймов, середина 2010 года, A1342)
  • Процессор: 2,4 ГГц Intel Core Duo
  • Память: 8 ГБ, 1067 МГц, DDR3
  • Программное обеспечение: MacOS Sierra 10.12.6

Процессор очень старый и более не выпускается, поэтому он не поддерживает технологию Intel Hyperthreading. Я не уверен, хорошо ли это с многопоточностью. Но если он может поддерживать многопоточность, сколько потоков он может поддерживать и будет ли это влиять на производительность, если я использую слишком много потоков?

Пожалуйста, исправьте меня, если я ошибаюсь, но я прочитал, что ядро без гиперпоточности может поддерживать только 1 поток, поэтому я думаю, что, возможно, мой процессор может поддерживать до 2 потоков, тогда любые другие потоки после этого будут иметь незначительный эффект.

0
Похоже, вам нужно прочитать о [Многозадачность] (https://en.wikipedia.org/wiki/Computer_multitasking). Очень важно отличать работу, связанную с вводом-выводом, от работы, связанной с процессором. Daniel B 6 лет назад 1
Что именно вы имеете в виду, когда говорите: «Я надеюсь ускорить загрузку некоторых данных из Amazon S3…». Что это? Вы скачиваете файлы? Или что-то другое? Amazon S3 - это просто установка для хранения файлов. Я не слишком уверен, как многопоточность поможет такой задаче, связанной с пропускной способностью. JakeGould 6 лет назад 0
Я новичок в программировании, поэтому я пытаюсь понять, что мне нужно знать. У меня есть 950 ГБ файлов для загрузки с Amazon S3. Я думал, что смогу использовать два потока, каждый из которых загружает половину этой суммы, работая параллельно. @JakeGould briennakh 6 лет назад 0
@briennakh Как [указано в этом ответе] (https://superuser.com/a/1330145/167207), загрузка файлов не является какой-либо ресурсоемкой задачей процессора. Вы можете запустить несколько процессов, которые могут пытаться загрузить более одного файла параллельно, но это не будет задачей, связанной с процессором. Все зависит от пропускной способности и вашего сетевого подключения. JakeGould 6 лет назад 1
ААА, хорошо. Спасибо, я ценю ваше время, чтобы ответить на мой вопрос новичка. Причина, по которой я думал, что это сработает, заключается в следующем: https://boto3.readthedocs.io/en/latest/guide/resources.html#multithreading-multiprocessing briennakh 6 лет назад 0
@briennakh Круто! Рад был помочь. Просто чтобы вы знали, главное преимущество запуска двух процессов для загрузки файлов заключается в том, что вы распространяете свои ставки, чтобы у вас не было простоев. Это означает, что если у вас есть одна загрузка, но затем она замедляется ... Ничто не может восполнить провал. Но если у вас есть, скажем, две загрузки и одна замедляется, второй процесс может воспользоваться замедлением другого процесса для увеличения пропускной способности сети. Один процесс никогда не может манипулировать такими задачами. JakeGould 6 лет назад 0

2 ответа на вопрос

2
Yury Schkatula

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

  1. Многопоточность возможна даже на одноядерных процессорах. Выполнение просто разделяется во времени, поэтому в любой момент времени у вас есть 1 активный поток, однако общее выполнение потоков выполняется параллельно.
  2. Многопоточность не эквивалентна ускорению. Если многопоточное приложение наивно разработано, оно всегда медленнее однопоточного приложения в десятки или даже сотни раз.
  3. Загрузка из внешних сетей в 99% случаев не зависит от многопоточности. Возможно, стоит взглянуть на многодиапазонную загрузку HTTP, как это было реализовано в таких приложениях, как NetAnts, ReGet и других, начиная с эпохи коммутируемых модемов. Однако нет гарантии, что многодиапазонная загрузка может быть быстрее, чем обычная, из-за различных сетевых политик и задействованных серверов.

Итак, в конце концов. Вы определенно должны собрать показатели в своем приложении: что такое медленная операция? И затем перепроектируйте это, чтобы получить больше скорости.

1
Ramhound

Как я могу узнать максимальное количество потоков, которые я могу использовать?

Intel Core Duo имеет 2 потока, потому что он имеет двухъядерный процессор с одним ядром. Каждое ядро ​​имеет возможность одного потока.

Но если он может поддерживать многопоточность, сколько потоков он может поддерживать и будет ли это влиять на производительность, если я использую слишком много потоков?

Поддерживает 2 потока.

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

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

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