В чем разница между многопоточностью, многозадачностью и многопроцессовостью?

Может кто-нибудь обьяснить доступным языком различия между этими понятиями, или дать ссылку где это обьясняют?
upd
Интересует в рамках программирования, а не администрирования. Т.е. что означает "программа работает в несколько потоков", "программа может создавать новые процессы".
  • Вопрос задан
  • 19246 просмотров
Решения вопроса 2
@xfg
В одном процессе может быть много потоков, но всегда как минимум есть один. Потоки внутри одного процесса делят общую память, изменение данных в одном потоке будет видно во всех остальных.

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

А многозадачность это свойство ОС вычислять одновременно (*условно говоря) много задач (процессов и потоков) или проще говоря программ. Это дает вам возможность одновременно играть в игру и слушать музыку на своем компьютере.

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

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

При создании любого процесса внутри него автоматически создается как минимум 1 поток. Но также вы можете самостоятельно создать и более 1 потока, если у вас появится такая необходимость.
Ответ написан
1. Многозадачность. Термин обычно не применяется к прикладному ПО, только к операционной системе, а точнее к ядрам ОС. Многозадачность - способость системного ПО распределять вычислительные ресурсы между несколькими параллельно (т.е. условно одновременно) запущенными вычислениями. Различают кооперативную и вытесняющую. Как правило, поддержка многозадачности сводится к тесной работе с железом и умению ядра сохранять состояние вычислительной системы (например, регистров процессора), и прозрачного переключения этого состояния для выполняющихся задач.

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

3. Многопроцессность - вариант реализации вычислений, когда для решения некоторой прикладной задачи запускается несколько независимых процессов. В системах, где под процессом понимается сущность, владеющая ресурсами (памятью, открытыми файлами, сетевыми подключениями), несколько процессов запускаются с целью повышения отказоустойчивости приложения а также с целью повышения безопасности. Т.к. ОС выполняет разделение памяти и прочих ресурсов именно между процессами (в то время как потоки работают в едином адресном пространстве), то а) внезапно упавший (читай - убитый ОС) процесс не уронит остальные; б) если в процессе начал выполняться чужеродный код (например, из-за RCE уязвимости), то он не получит доступ к содержимому памяти в других процессах. Многопроцессность сегодня можно увидеть в браузерах, когда отдельные вкладки выполняются в разных процессах, и упавшая вкладка (из-за js или из-за кривого плагина) тянет за собой не весь браузер, а только себя или еще пару вкладок.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@itvsem
Кто владеет информацией, тот владеет миром
А разницы между ними нет, так как они друг с другом не связаны на прямую.

Многопото́чность — свойство платформы параллельно решать одну задачу, для увеличения скорости, то есть зависит от приложения.
Многозада́чность - свойство ОС обеспечивать возможность параллельной работы для решения задач.
Многопроцессорность - это использование в составе одного устройства двух или более физических процессоров.

Если вообще обобщить для простого понимания:
1. Ты создаешь приложение, которому нужно для быстроты делать задачи параллельно
2. Это приложение ты пишешь для определенной ОС, которая должна поддерживать работу с задачей параллельно
3. Должно быть железо, которое все это потянет.
Ответ написан
Rou1997
@Rou1997
Впервые слышу термин "многопроцессовость", у одного приложения может быть несколько процессов (в диспетчере задач), например у любого современного браузера если одновременно открыто несколько страниц, то у каждой свой процесс, ОС старается выполнять процессы одновременно, сначала первая инструкция первого процесса, потом первая - второго, потом вторая - первого и т.п., по возможности каждым процессом вовсе занимается отдельное ядро процессора (отдельный логический процессор), все это повышает быстродействие и позволяет реализовать такие алгоритмы, как циклы обработки сообщений, бесконечные циклы не "завешивают" всю ОС.
Потоки - то же самое, что процессы, только внутри процесса, как папки и файлы.
Задачи - это потоки и процессы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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