服务器崩溃时线程会发生什么?
What happen to a thread on a server crash?
假设我遵循客户端-服务器模型,一个客户端(实际上是一个线程)阻塞在远程服务器(实际上是一个监视器)上。
如果服务器由于某种原因崩溃,该线程会发生什么情况?
答案是:视情况而定:
- 有可能这个线程就在那里;永远等待。
- 但也有可能某个时候抛出异常;该线程以某种方式返回 "alive".
在这里起作用的东西:
- 底层 TCP 栈
- 您对此的使用(例如,可以为套接字提供超时值;这会导致在超时情况下抛出异常)
- 您的客户是如何编码的
换句话说:没有人可以告诉您您的 客户端应用程序将做什么。因为我们没有关于您正在处理的实施和配置细节的任何信息。
或者,换个角度:你应该确保你的客户使用某种形式的超时。如前所述,这可以通过在用于通信的 sockets 上设置超时来完成。或者让 另一个 线程监视与服务器通信的所有线程;为了防止此类线程永远等待,它会在某个时候启动。
长话短说:如果您认真对待此类问题;你必须做很多研究;一个好的起点是 Michael Nygard 的经典 "Release it"。
假设我遵循客户端-服务器模型,一个客户端(实际上是一个线程)阻塞在远程服务器(实际上是一个监视器)上。
如果服务器由于某种原因崩溃,该线程会发生什么情况?
答案是:视情况而定:
- 有可能这个线程就在那里;永远等待。
- 但也有可能某个时候抛出异常;该线程以某种方式返回 "alive".
在这里起作用的东西:
- 底层 TCP 栈
- 您对此的使用(例如,可以为套接字提供超时值;这会导致在超时情况下抛出异常)
- 您的客户是如何编码的
换句话说:没有人可以告诉您您的 客户端应用程序将做什么。因为我们没有关于您正在处理的实施和配置细节的任何信息。
或者,换个角度:你应该确保你的客户使用某种形式的超时。如前所述,这可以通过在用于通信的 sockets 上设置超时来完成。或者让 另一个 线程监视与服务器通信的所有线程;为了防止此类线程永远等待,它会在某个时候启动。
长话短说:如果您认真对待此类问题;你必须做很多研究;一个好的起点是 Michael Nygard 的经典 "Release it"。