首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程与线程的区别

进程与线程的区别
EN

Stack Overflow用户
提问于 2011-04-22 04:42:22
回答 10查看 9.9K关注 0票数 8

在今天的面试中,我被问了一个问题。首先,他们询问如何在线程之间提供同步。然后他们问如何提供进程之间的同步,因为我告诉他们,每个进程内的变量不能与其他进程共享,所以他们要求我解释两个进程如何相互通信,如何提供它们之间的同步,以及在哪里声明共享变量?现在采访结束了,但是我想知道答案,有谁能解释我吗?谢谢。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-04-22 10:45:53

我认为面试官可能没有使用正确的术语。进程在自己的空间中运行,并且已经在单独的答案中提到,您必须使用特定于操作系统的机制在进程之间进行通信。这被称为进程间通信的IPC。

使用套接字是一种常见的做法,但根据您的应用程序的不同,使用套接字的效率可能非常低。但是如果使用纯Java,这可能是唯一的选择,因为套接字是普遍支持的。

共享内存是另一种技术,但它是特定于操作系统的,需要特定于操作系统的调用。对于Java应用程序,您必须使用类似于JNI的方式来访问共享内存服务。共享内存访问是不同步的,因此您可能必须使用信号量来同步多个进程之间的访问。

类Unix系统提供了多个IPC机制,使用哪种机制取决于应用程序的性质。共享内存可能是有限的资源,因此它可能不是最好的方法。关于这个主题的谷歌搜索提供了大量的点击,提供了关于技术细节的有用信息。

票数 6
EN

Stack Overflow用户

发布于 2013-05-20 20:04:33

进程是虚拟内存空间、代码、数据和系统资源的集合。线程是要在进程内串行执行的代码。处理器执行线程,而不是进程,因此每个应用程序至少有一个进程,并且进程始终至少有一个执行线程,称为主线程。除了主线程之外,一个进程还可以有多个线程。在引入多线程执行之前,应用程序都被设计为在单个执行线程上运行。

当线程开始执行时,它将继续执行,直到它被终止或被具有更高优先级的线程中断(由用户操作或内核的线程调度程序中断)。每个线程可以运行单独的代码段,或者多个线程可以执行相同的代码段。执行相同代码块的线程维护不同的堆栈。进程中的每个线程共享该进程的全局变量和资源。

票数 3
EN

Stack Overflow用户

发布于 2011-04-22 04:57:08

要在两个进程之间通信,我想您可以使用ServerSocket和套接字来管理进程同步。您可以绑定到特定的端口(获取锁),如果某个进程已经绑定,您可以连接到套接字(块),并等待服务器套接字关闭。

代码语言:javascript
复制
private static int KNOWN_PORT = 11000;//arbitrary valid port
private ServerSocket socket;
public void acquireProcessLock(){
   socket = new ServetSocket(KNOWN_PORT);
   INetAddress localhostInetAddres = ...
   try{
      socket.bind(localhostInetAddres );
   }catch(IOException failed){
      try{
       Socket socket = new Socket(localhostInetAddres ,KNOWN_PORT);
       socket.getInputStream().read();//block
      }catch(IOException ex){ acquireProcessLock(); } //other process invoked releaseProcessLock()
   }
}
public void releaseProcessLock(){
  socket.close();
}

我不确定这是否是最好的方法,但我认为它值得考虑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5749577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档