Например задача:
просканировать страницы сайта с 1 по 1000
выцепить на каждой странице по несколько ссылок.
перейти по этим ссылкам и выцепить контент
В php это один поток - пока одна задача не выполнилась, другая не начнётся.
А в других языках возможно ли в многопотоке запустить эту программу? Как это будет выглядеть?
И вообще будет ли эффект от многопоточности или всё равно как запускать прграмму в 1 потоке или в 5 - общая скорость будет одинаковая?
C/C++
Как реализуется многопоточность в программах?
> Как это будет выглядеть?
Как напишешь, так и будет выглядеть. В многопоточности нет чего-то волшебного. Просто несколько функций выполняются одновременно. Это может быть одна и та же функция или разные функции. Это похоже на параллельный запуск нескольких приложений. Отличие в том, что потоки работают в одном адресном пространстве. Им легче обмениваться данными (хотя там тоже есть проблемы).
Например, можно разделить страницы с 1 по 1000 на несколько диапазонов, допустим, по 100 страниц. Каждый поток будет обрабатывать свой диапазон.
Или так. Решаем, какое число потоков оптимальное. Каждый поток берёт страницу из очереди. По окончании обработки страницы берёт следующую страницу из очереди. Изначально очередь содержит все страницы.
Как напишешь, так и будет выглядеть. В многопоточности нет чего-то волшебного. Просто несколько функций выполняются одновременно. Это может быть одна и та же функция или разные функции. Это похоже на параллельный запуск нескольких приложений. Отличие в том, что потоки работают в одном адресном пространстве. Им легче обмениваться данными (хотя там тоже есть проблемы).
Например, можно разделить страницы с 1 по 1000 на несколько диапазонов, допустим, по 100 страниц. Каждый поток будет обрабатывать свой диапазон.
Или так. Решаем, какое число потоков оптимальное. Каждый поток берёт страницу из очереди. По окончании обработки страницы берёт следующую страницу из очереди. Изначально очередь содержит все страницы.
Система выделяет каждому процессу, при обычном приоритете, равные кванты времени, которые предоставляются последовательно. Пока один процесс (на одном ядре) выполняется все остальные, которым нужно процессорное время, ожидают его завершения либо выделенного под него времени. Затем всё повторяется. Каждая такая сессия представляет собой одну итерацию цикла, в которой каждый процесс получает по одному кванту времени. Если ваши вычисления затратны по времени и вам нужно больше времени, вы можете попросить у системы несколько квантов времени в рамках одной сессии, разделив вычисления на потоки, которые будут исполняться в рамках этой сессии. Так реализована многопоточность. Многопоточность возможна в рамках одного ядра процессора.
Кроме этого существуют параллельные вычисления. Он отличаются тем, что параллельные потоки будут выполняться одновременно на разных ядрах. В рамках параллельных вычислений допускается и многопоточность, когда параллельные потоки, исполняемые на разных ядрах процессора, ещё делятся на потоки в рамках одного ядра.
Кроме этого существуют параллельные вычисления. Он отличаются тем, что параллельные потоки будут выполняться одновременно на разных ядрах. В рамках параллельных вычислений допускается и многопоточность, когда параллельные потоки, исполняемые на разных ядрах процессора, ещё делятся на потоки в рамках одного ядра.
Похожие вопросы
- Написать программу на языке Си
- Некорректно работает написанная программа
- Написать программу на с++
- Помогите написать программу на С++
- Написать программы на СИ
- Помогите разобраться с программой
- Написать программу в С++ (нахождение площади трапеции)
- Помогите дополнить программу по условию
- Программа не выполняет условия задания, исходный массив меняет сам себя, помогите найти ошибку
- Программа на с++.