2010-03-27 2 views

ответ

15

Основное отличие состоит в том, что потоки живут в одном и том же адресном пространстве, но процессы живут в разных адресных пространствах. Это означает, что межпоточная связь заключается в передаче ссылок на объекты и изменении общих объектов, но процессы состоят в передаче сериализованных копий объектов.

На практике межпотоковая связь Java может быть реализована как обычные вызовы Java-метода для общего объекта с соответствующей синхронизацией. В качестве альтернативы вы можете использовать новые классы параллелизма, чтобы скрыть некоторые из ничтожеств (и подверженных ошибкам) ​​синхронизации вопросы.

Напротив, межпроцессное взаимодействие Java основано на самом низком уровне при включении состояния, запросов и т. Д. В последовательности байтов, которые могут быть отправлены в виде сообщений или как поток для другого процесса Java. Вы можете сделать эту работу самостоятельно, или вы можете использовать различные «промежуточные» технологии различного уровня сложности, чтобы абстрагировать детали реализации. Технологии, которые могут быть использованы, включают в себя сериализацию объектов Java, XML, JSON, RMI, CORBA, SOAP/«веб-службы», сообщение queing и т. Д.

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

+0

Спасибо Стивену, я могу получить ответ теоретически. Лучше, если вы дадите примеры в реальном времени или фрагмент кода, чтобы объяснить эту разницу. Pzz – JavaUser

+3

@JavaUser - вы имеете в виду реальное время или реальную жизнь? В любом случае, хороший способ изучить этот материал - это обширная онлайн-информация от Sun/Oracle. –

2

Мне нравится думать об одном экземпляре JVM как о процессе. Таким образом, межпроцессное общение будет осуществляться между экземплярами JVM, например, через сокеты (передача сообщений).

Нити в java-исполнении Runnable и содержатся в JVM. Они делятся данными просто путем передачи ссылок в JVM. Всякий раз, когда потоки обмениваются данными, вы почти всегда должны защищать данные, поэтому несколько потоков не сбиваются друг с другом. Существует множество механизмов защиты, которые включают предотвращение ввода нескольких потоков в критические разделы кода.

5

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

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

  1. сетевых пакетов.
  2. Файлы
  3. Трубы
  4. Shared Memory
  5. семафоры
  6. CORBA сообщений
  7. RPC называет

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

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

2

Связь между потоками = потоки внутри одной и той же виртуальной машины Java разговаривать друг с другом

Межпроцессное взаимодействия (IPC) = потоки внутри одной и той же машине, но работают в разных виртуальных машинах разговаривать друг с другом

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

Темы в разных JVM-файлах могут использовать разделяемую память (кукурузу), хранящуюся в кучу (обычно полученную через один и тот же файл с отображением памяти), чтобы разговаривать друг с другом с помощью наносекундной задержки.

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

Для получения полного пояснения о незакрепленных очередях и IPC вы можете проверить CoralQueue.

Отказ от ответственности: Я являюсь одним из разработчиков CoralQueue.