
Как узнать максимальное количество потоков, которые я могу использовать? Я новичок в программировании, поэтому пытаюсь выяснить, что мне нужно знать. У меня есть 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 потоков, а последующее увеличение количества потоков будет иметь незначительный эффект.
решение1
В вашем вопросе содержится несколько ложных предположений, поэтому позвольте мне прояснить ситуацию:
- Многопоточность возможна даже на одноядерных процессорах.Выполнение просто разделяется во времени, так что в любой момент времени активен только один поток, однако общее выполнение потоков является параллельным.
- Многопоточность не эквивалентна ускорению.При наивной разработке многопоточное приложение всегда медленнее однопоточного в десятки или даже сотни раз.
- Загрузка из внешних сетей в 99% случаев не зависит от многопоточности.Возможно, стоит взглянуть на многодиапазонную HTTP-загрузку, как это было реализовано в таких приложениях, как NetAnts, ReGet и других из эпохи модемов dial-up. Однако нет гарантии, что многодиапазонная загрузка может быть быстрее обычной из-за различных сетевых политик и задействованных серверов.
Итак, все в конце концов. Вам определенно нужно собирать метрики в вашем приложении: Какая самая медленная операция? А затем перепроектировать его, чтобы получить большую скорость.
решение2
Как узнать максимальное количество потоков, которые я могу использовать?
Intel Core Duo имеет 2 потока, поскольку имеет 2-ядерный однопоточный процессор. Каждое ядро имеет возможность одного потока.
Но если он может поддерживать многопоточность, сколько потоков он может поддерживать и повлияет ли использование слишком большого количества потоков на производительность?
Поддерживает 2 потока.
поэтому я думаю, что, возможно, мой процессор может поддерживать до 2 потоков, а последующее увеличение количества потоков будет иметь незначительный эффект.
Он не способен обрабатывать более 2 потоков. Ваше многопоточное приложение будет иметь только два потока, поскольку вы можете генерировать только 2 потока из-за оборудования.