Разница между потоком и процессом

Разница между потоком и процессом

С помощью процессов можно организовать параллельное выполнение программ. Для этого процессы клонируются вызовами fork () или exec (), а затем между ними организуется взаимодействие средствами IPC. Это довольно дорогостоящий в отношении ресурсов процесс.

С другой стороны, для организации параллельного выполнения и взаимодействия процессов можно использовать механизм многопоточности. Основной единицей здесь является поток.

Поток представляет собой облегченную версию процесса. Чтобы понять, в чем состоит его особенность, необходимо вспомнить основные характеристики процесса.

  1. Процесс располагает определенными ресурсами. Он размещен в некотором виртуальном адресном пространстве, содержащем образ этого процесса. Кроме того, процесс управляет другими ресурсами (файлы, устройства ввода / вывода и т.д.).
  2. Процесс подвержен диспетчеризации. Он определяет порядок выполнения одной или нескольких программ, при этом выполнение может перекрываться другими процессами. Каждый процесс имеет состояние выполнения и приоритет диспетчеризации.

Если рассматривать эти характеристики независимо друг от друга (как это принято в современной теории ОС), то:

    владельцу ресурса, обычно называемому процессом или задачей, присущи:

  • виртуальное адресное пространство;
  • индивидуальный доступ к процессору, другим процессам, файлам, и ресурсам ввода — вывода.
  • Модулю для диспетчеризации, обычно называемому потоком или облегченным процессом, присущи:
    • состояние выполнения (активное, готовность и т.д.);
    • сохранение контекста потока в неактивном состоянии;
    • стек выполнения и некоторая статическая память для локальных переменных;
    • доступ к пространству памяти и ресурсам своего процесса.

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

    При корректной реализации потоки имеют определенные преимущества перед процессами. Им требуется:

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

    Мне задали вопрос во время интервью Сегодня. Сначала они спросили, как обеспечить синхронизацию между потоками. Затем они спросили, как обеспечить синхронизацию между процессами, потому что я сказал им, что переменная внутри каждого процесса не может быть совместно использована с другим процессом, поэтому они попросили меня объяснить, как два процесса могут взаимодействовать друг с другом и как обеспечить синхронизацию между ними, и где объявить общую переменную? Теперь интервью закончено, но я хочу знать ответьте, кто-нибудь может мне объяснить?Спасибо.

    Читайте также:  Мощная wifi антенна своими руками

    10 ответов

    Я думаю, что интервьюер(ы) может не использовать правильную терминологию. Процесс работает в своем собственном пространстве и был упомянут в отдельных ответах, вы должны использовать специфические для ОС механизмы для связи между процессом. Это называется IPC для Межпроцессной связи.

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

    общая память-это еще один метод, но он специфичен для ОС и требует специфичных для ОС вызовов. Вам нужно будет использовать что-то вроде JNI для приложения Java для доступа к службам общей памяти. Доступ к общей памяти не синхронизирован, поэтому вам, вероятно, придется использовать семафоры для синхронизации доступа между несколькими процессами.

    Unix-подобные системы предоставляют несколько механизмов IPC, и какой из них использовать, зависит от характера вашего приложения. Разделяемая память может быть ограниченным ресурсом, поэтому это может быть не лучший метод. Googling по этим темам предоставляет многочисленные хиты, предоставляющие полезную информацию о технических деталях.

    для связи между двумя процессами я полагаю, что вы можете использовать ServerSocket и Socket для управления синхронизацией процессов. Вы должны привязаться к определенному порту (получить блокировку), и если процесс уже привязан, вы можете подключиться к сокету (блоку) и ждать, пока сокет сервера не будет закрыт.

    Не уверен, что это настоящий лучший способ сделать это, но я думаю, что его стоит рассмотреть.

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

    Читайте также:  Скорость выполнения двойного щелчка

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

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

    с точки зрения системы, Поток определяется его "государство" и "инструкция указатель".

    указатель инструкций (eip) содержит адрес следующей инструкции для выполнения.

    какой-нить "государство" может быть:регистры (eax, ebx,etc),сигналы на открыть файлы на код на стек, в данные управлял этим потоком (переменные, массивы и т. д.), а также кучу.

    A это группа потоков, которые разделяют часть их "государство": это может быть код на данные на кучу. Надеюсь, я отвечу на ваш вопрос;)

    изменить: Процессы могут взаимодействовать через IPCs (Inter process communications). Есть 3 должен иметь приложение : общий , очереди сообщений. Синхронизация между процессами может мне сделана с помощью семафоров

    синхронизация потоков может мне сделать с мьютексы (pthread_mutex_lock, pthread_mutex_unlock и т. д.)

    Регистрация Терракотовая Кластера или терракота DSO кластеризация документация, чтобы увидеть, как эта проблема может быть решена (манипуляция байт-кодом, поддержка семантики спецификации языка Java на уровне putfield/getfield и т. д.)

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

    Читайте также:  Робот пылесос сяоми видео обзор

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

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

      Задачки, 1 февраля 2015 в 22:40

    Процессы и потоки связаны друг с другом, но при этом имеют существенные различия.

    Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.

    Поток использует то же самое пространства стека, что и процесс, а множество потоков совместно используют данные своих состояний. Как правило, каждый поток может работать (читать и писать) с одной и той же областью памяти, в отличие от процессов, которые не могут просто так получить доступ к памяти другого процесса. У каждого потока есть собственные регистры и собственный стек, но другие потоки могут их использовать.

    Поток — определенный способ выполнения процесса. Когда один поток изменяет ресурс процесса, это изменение сразу же становится видно другим потокам этого процесса.

    Ссылка на основную публикацию
    Adblock detector