Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java进程间通信和线程间通信?_Java_Multithreading - Fatal编程技术网

Java进程间通信和线程间通信?

Java进程间通信和线程间通信?,java,multithreading,Java,Multithreading,在Java上下文中,线程和进程之间有什么区别? Java如何实现进程间通信和线程间通信? 请给我举一些现实生活中的例子。根本区别在于线程位于相同的地址空间,而进程位于不同的地址空间。这意味着线程间通信是关于向对象传递引用和更改共享对象,而进程是关于传递对象的序列化副本 实际上,Java线程间通信可以实现为对共享对象的普通Java方法调用,并抛出适当的同步。或者,您可以使用新的并发类来隐藏一些实质性(并且容易出错)的同步问题 相反,Java进程间通信在最低级别是基于将状态、请求等转换为字节序列,这

在Java上下文中,线程和进程之间有什么区别? Java如何实现进程间通信和线程间通信?
请给我举一些现实生活中的例子。

根本区别在于线程位于相同的地址空间,而进程位于不同的地址空间。这意味着线程间通信是关于向对象传递引用和更改共享对象,而进程是关于传递对象的序列化副本

实际上,Java线程间通信可以实现为对共享对象的普通Java方法调用,并抛出适当的同步。或者,您可以使用新的并发类来隐藏一些实质性(并且容易出错)的同步问题

相反,Java进程间通信在最低级别是基于将状态、请求等转换为字节序列,这些字节序列可以作为消息或流发送到另一个Java进程。您可以自己完成这项工作,也可以使用各种不同复杂程度的“中间件”技术来抽象出实现细节。可以使用的技术包括Java对象序列化、XML、JSON、RMI、CORBA、SOAP/“web服务”、消息查询等


在实际层面上,线程间通信比进程间通信快很多数量级,并且允许您更简单地完成许多事情。但缺点是所有东西都必须生活在同一个JVM中,因此存在潜在的可伸缩性问题、安全性问题、健壮性问题等等。

我喜欢将JVM的单个实例视为一个进程。因此,进程间通信将是JVM实例之间的通信,例如,通过套接字(消息传递)


java中的线程实现可运行,并包含在JVM中。它们通过在JVM中传递引用来共享数据。每当线程共享数据时,您几乎总是需要保护数据,以便多个线程不会相互碰撞。有许多保护机制都涉及防止多个线程进入代码的关键部分。

一个线程可以访问进程内的内存,甚至可以访问同一进程内另一个线程可以操作的内存。由于所有线程都位于同一运行进程的内部,因此它们可以更快地通信(因为它们不需要操作系统来判断)

一个进程无法访问另一个进程内的内存,尽管您可以通过以下各种方式在进程之间进行通信:

  • 网络包
  • 档案
  • 管道
  • 共享内存
  • 信号量
  • Corba消息
  • RPC调用
  • 进程间通信需要记住的重要一点是,通信必须通过操作系统进行管理,就像所有需要中间人的事情一样,这会增加开销


    另一方面,如果一个线程行为不正常,它会在正在运行的进程中这样做,并且很有可能它会删除所有行为良好的线程。如果一个进程行为不正常,它就不能直接写入其他进程的内存,很可能只有行为不正常的进程才会死掉。

    线程间通信=同一JVM内的线程相互通信

    进程间通信(IPC)=同一台机器内但在不同JVM中运行的线程相互通信

    同一JVM中的线程可以通过无锁队列使用流水线,以纳秒的延迟相互通信

    不同JVM中的线程可以使用堆外共享内存(通常通过相同的内存映射文件获取)以纳秒的延迟相互通信

    不同机器中的线程可以使用网络以微秒的延迟相互通信

    有关无锁队列和IPC的完整说明,请查看

    免责声明:我是CoralQueue的开发者之一