Чем отличается процесс от потока java
В параллельном программировании есть две основных единицы выполнения: процессы и потоки. В языке программирования Java параллельное программирование главным образом касается потоков. Однако, процессы также важны.
У компьютерной системы обычно есть много активных процессов и потоков. Это — истина даже в системах, у которых только есть единственное ядро выполнения, и таким образом только имейте один поток, фактически выполняющийся в любой данный момент. Время обработки для одноядерного совместно используется среди процессов и потоков через функцию ОС, названную квантованием времени.
Это все больше распространено для компьютерных систем, чтобы иметь многократные процессоры или процессоры с ядрами массовой казни. Это значительно улучшает емкость системы для параллельного выполнения процессов и потоков — но параллелизм возможен даже на простых системах без многократных процессоров или ядер выполнения.
Процессы
У процесса есть автономная среда выполнения. У процесса обычно есть полный, частный набор основных ресурсов времени выполнения; в частности у каждого процесса есть свое собственное пространство памяти.
Процессы часто замечаются как синонимичные с программами или приложениями. Однако, что видит пользователь, поскольку единственное приложение может фактически быть рядом процессов сотрудничества. Чтобы облегчить передачу между процессами, большинство поддержки операционных систем Предает Передачу Процесса земле (IPC) ресурсы, такие как каналы и сокеты. IPC используется не только для передачи между процессами на той же самой системе, но обрабатывает на различных системах.
Большинство реализаций виртуальной машины Java, выполненной как единственный процесс. Приложение Java может создать дополнительные процессы, используя a ProcessBuilder объект. Приложения мультипроцесса выходят за рамки этого урока.
Потоки
Потоки иногда вызывают легкими процессами. И процессы и потоки обеспечивают среду выполнения, но создание нового потока требует меньшего количества ресурсов чем создание нового процесса.
Потоки существуют в пределах процесса — у каждого процесса есть по крайней мере один. Потоки совместно используют ресурсы процесса, включая память и открытые файлы. Это делает для эффективной, но потенциально проблематичной, передачи.
Многопоточное выполнение является существенной особенностью платформы Java. У каждого приложения есть по крайней мере один поток — или несколько, если Вы считаете «системные» потоки, которые делают вещи как обработка сигнала и управление памятью. Но с точки зрения прикладного программиста, Вы запускаете только с одного потока, названного основным потоком. У этого потока есть возможность создать дополнительные потоки, поскольку мы будем демонстрировать в следующем разделе.
Ваше использование этой страницы и всего материала на страницах под «Учебным баннером» Java подвергается этим официальным уведомлениям.
Авторское право © 1995, 2012 Oracle и/или его филиалы. Все права защищены.
Чем отличается процесс от потока java
Прежде чем приступить к разговору о многопоточности, следует уточнить некоторые термины.
Обычно в любой многопоточной операционной системе выделяют такие объекты, как процессы и потоки. Между ними существует большая разница, которую следует четко себе представлять.
Процесс
Процесс (process) — это объект, который создается операционной системой, когда пользователь запускает приложение. Процессу выделяется отдельное адресное пространство, причем это пространство физически недоступно для других процессов. Процесс может работать с файлами или с каналами связи локальной или глобальной сети. Когда вы запускаете текстовый процессор или программу калькулятора, вы создаете новый процесс.
Поток
Для каждого процесса операционная система создает один главный поток (thread ), который является потоком выполняющихся по очереди команд центрального процессора. При необходимости главный поток может создавать другие потоки, пользуясь для этого программным интерфейсом операционной системы.
Все потоки, созданные процессом, выполняются в адресном пространстве этого процесса и имеют доступ к ресурсам процесса. Однако поток одного процесса не имеет никакого доступа к ресурсам потока другого процесса, так как они работают в разных адресных пространствах. При необходимости организации взаимодействия между процессами или потоками, принадлежащими разным процессам, следует пользоваться системными средствами, специально предназначенными для этого.
Приоритеты потоков в приложениях Java
Если процесс создал несколько потоков, то все они выполняются параллельно, причем время центрального процессора (или нескольких центральных процессоров в мультипроцессорных системах) распределяется между этими потоками.
Распределением времени центрального процессора занимается специальный модуль операционной системы — планировщик. Планировщик по очереди передает управление отдельным потокам, так что даже в однопроцессорной системе создается полная иллюзия параллельной работы запущенных потоков.
Распределение времени выполняется по прерываниям системного таймера. Поэтому каждому потоку дается определенный интервал времени, в течении которого он находится в активном состоянии.
Заметим, что распределение времени выполняется для потоков, а не для процессов. Потоки, созданные разными процессами, конкурируют между собой за получение процессорного времени.
Каким именно образом?
Приложения Java могут указывать три значения для приоритетов потоков. Это NORM_PRIORITY, MAX_PRIORITY и MIN_PRIORITY.
По умолчанию вновь созданный поток имеет нормальный приоритет NORM_PRIORITY. Если остальные потоки в системе имеют тот же самый приоритет, то все потоки пользуются процессорным времени на равных правах.
При необходимости вы можете повысить или понизить приоритет отдельных потоков, определив для них значение приоритета, соответственно, MAX_PRIORITY или MIN_PRIORITY. Потоки с повышенным приоритетом выполняются в первую очередь, а с пониженным — только при отсутствии готовых к выполнению потоков, имеющих нормальный или повышенный приоритет.
В чем разница между потоком и процессом?
Процессы и потоки связаны друг с другом, но при этом имеют существенные различия.
Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.
Поток использует то же самое пространства стека, что и процесс, а множество потоков совместно используют данные своих состояний. Как правило, каждый поток может работать (читать и писать) с одной и той же областью памяти, в отличие от процессов, которые не могут просто так получить доступ к памяти другого процесса. У каждого потока есть собственные регистры и собственный стек, но другие потоки могут их использовать.
Поток — определенный способ выполнения процесса. Когда один поток изменяет ресурс процесса, это изменение сразу же становится видно другим потокам этого процесса.
Разбор взят из книги Гейл Л. Макдауэлл «Cracking the Coding Interview» (есть в переводе).
Отличия процесса и потока
Стандартный вопрос практически на каждом собеседовании по Java. Какие отличия процесса (process) и потока (thread) ?
Отслеживать
3,923 4 4 золотых знака 21 21 серебряный знак 37 37 бронзовых знаков
задан 16 апр 2018 в 9:31
1,102 9 9 серебряных знаков 23 23 бронзовых знака
а зачем минусуем то? норм вопрос
16 апр 2018 в 10:02
@ArtemKonovalov «Прежде чем задать вопрос, убедитесь, что вы выполнили тщательный поиск ответа. Поделитесь результатом вашего поиска и расскажите, что вы нашли и почему найденные ответы вас не устроили. Это продемонстрирует вашу способность думать самостоятельно, поможет избежать повторяющихся очевидных ответов и, самое важное, увеличит шансы на получение точного ответа!» Как задавать вопросы
16 апр 2018 в 10:20
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Процессы и потоки связаны друг с другом, но при этом имеют существенные различия.
Процесс — экземпляр программы во время выполнения, независимый объект, которому выделены системные ресурсы (например, процессорное время и память). Каждый процесс выполняется в отдельном адресном пространстве: один процесс не может получить доступ к переменным и структурам данных другого. Если процесс хочет получить доступ к чужим ресурсам, необходимо использовать межпроцессное взаимодействие. Это могут быть конвейеры, файлы, каналы связи между компьютерами и многое другое.
Поток использует то же самое пространства стека, что и процесс, а множество потоков совместно используют данные своих состояний. Как правило, каждый поток может работать (читать и писать) с одной и той же областью памяти, в отличие от процессов, которые не могут просто так получить доступ к памяти другого процесса. У каждого потока есть собственные регистры и собственный стек, но другие потоки могут их использовать.
Поток — определенный способ выполнения процесса. Когда один поток изменяет ресурс процесса, это изменение сразу же становится видно другим потокам этого процесса.
Первая ссылка в гугле. Неужели это так трудно.
