Java коммуникация Процесса Интера и коммуникация Потока Интера?

Каково различие между Потоком и Процессом в контексте Java? Как коммуникация межпроцессного взаимодействия и межпотока достигается в Java? Укажите на меня на некоторые реальные примеры.

6
задан Stephen C 3 April 2013 в 09:22
поделиться

3 ответа

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

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

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

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

19
ответ дан 8 December 2019 в 03:09
поделиться

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

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

  1. Сетевые пакеты.
  2. Файлы
  3. Каналы
  4. Общая память
  5. Семафоры
  6. Сообщения Corba
  7. Вызовы RPC

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

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

6
ответ дан 8 December 2019 в 03:09
поделиться

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

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

2
ответ дан 8 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

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