【发布时间】:2011-07-23 02:32:40
【问题描述】:
解释无状态和有状态系统之间的区别,以及状态对并行性的影响。
【问题讨论】:
-
不,在 Scott Hanselman 的网站上,这是一个针对优秀高级工程师的面试问题,我想知道答案。
-
直接来自hanselman.com/blog/…的问题
-
面试怎么样?
解释无状态和有状态系统之间的区别,以及状态对并行性的影响。
【问题讨论】:
无状态系统可以看作是一个盒子[黑色? ;)] 在任何时间点,输出的值仅取决于输入的值[在一定的处理时间之后]
有状态系统可以被视为一个盒子,在任何时间点,输出的值都取决于输入的值和内部状态的值,所以基本上一个有状态的系统就像一个带有“memory”的状态机,因为相同的一组输入值可以根据系统接收到的先前输入产生不同的输出.
从并行编程的角度来看,一个无状态系统,如果实施得当,可以由多个线程/任务同时执行,而不会出现任何并发问题[作为一个例子,考虑一个可重入函数] 有状态系统需要多个执行线程以独占方式访问和更新系统的内部状态,因此需要一个序列化[同步]点。
【讨论】:
有状态的服务器在连接之间保持状态。无状态服务器不会。
因此,当您向有状态服务器发送请求时,它可能会创建某种连接对象来跟踪您请求的信息。当您发送另一个请求时,该请求会根据前一个请求的状态进行操作。所以你可以发送一个请求来“打开”一些东西。然后您可以稍后发送请求以“关闭”它。在这两个请求之间,那个东西在服务器上是“打开的”。
当您向无状态服务器发送请求时,它不会创建任何对象来跟踪有关您的请求的信息。如果您在服务器上“打开”某些内容,则服务器根本不会保留您打开某些内容的信息。 “关闭”操作没有任何意义,因为没有什么可以关闭。
HTTP 和 NFS 是无状态协议。每个请求都是独立的。
有时 cookie 用于向无状态协议添加一些状态。在 HTTP(网页)中,服务器会向您发送一个 cookie,然后浏览器会保存该状态,只是为了在后续请求中将其发送回服务器。
SMB 是一个有状态的协议。客户端可以打开服务器上的文件,而服务器可能会拒绝其他客户端访问该文件,直到客户端将其关闭。
【讨论】: