无状态系统和有状态系统之间的区别是什么?它们如何影响并行性?


71

解释无状态系统与有状态系统之间的差异,以及状态对并行性的影响。




8
不,在Scott Hanselman的网站上,这是对高级工程师的面试问题,我想知道答案。
Stack Guru


1
那么面试怎么样了?
0xc0de

Answers:


82

一个无状态系统可以被看作是一个盒子[黑?;)]在任何时间点,输出值仅取决于输入值(在特定处理时间之后)

状态系统,而不是可以被看作是一个盒子,其中在任何时间点的输出(一个或多个)的值取决于在输入端(S)的值和内部状态的,所以basicaly有状态系统就像是一个状态机使用“ memory ”作为同一组输入值可以根据系统先前接收到的输入来生成不同的输出。

并行编程的角度来看,一个无状态系统(如果正确实现的话)可以由多个线程/任务同时执行,而没有任何并发​​问题(例如考虑可重入功能)。有状态系统将需要多个线程执行访问权限的访问和以专用方式更新系统的内部状态,因此将需要一个序列化[synchronization]点。


1
假设我有一个应用程序可以存储有关用户交易的数据,例如余额信贷,提款等。那么此应用程序是无状态的还是有状态的?因为此应用程序获取有关可能最近插入的用户的数据。
加尼

50

有状态服务器在连接之间保持状态。无状态服务器不会。

因此,当您将请求发送到有状态服务器时,它可能会创建某种连接对象来跟踪您请求的信息。当您发送另一个请求时,该请求将根据前一个请求的状态进行操作。因此,您可以发送请求以“打开”某些东西。然后,您可以发送请求以稍后“关闭”它。在两个请求之间,那个东西在服务器上是“打开”的。

当您将请求发送到无状态服务器时,它不会创建任何跟踪有关您的请求信息的对象。如果您“打开”服务器上的某些内容,则服务器将不会保留您打开的所有信息。“关闭”操作没有任何意义,因为没有什么可关闭的。

HTTP和NFS是无状态协议。每个请求都独立存在。

有时,cookie用于将某些状态添加到无状态协议中。在HTTP(网页)中,服务器向您发送一个cookie,然后浏览器保留该状态,仅在后续请求时将其发送回服务器。

SMB是有状态协议。客户端可以在服务器上打开文件,并且服务器可以拒绝其他客户端访问该文件,直到客户端将其关闭。


4
这个答案没有解决状态/少/满/自然对并行性的影响的问题。
高性能标记
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.