Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
http和线程_Http - Fatal编程技术网

http和线程

http和线程,http,Http,http是无状态的…变量和对象在每个请求中都会被销毁…我们有会话来维护状态 但是线程如何应用于http呢?这是否意味着,如果任意数量的用户都使用一个帐户或试图更新我数据库中的一条记录(我知道DBMS上的锁定),我只能摆弄cookie和会话数据 是否没有信号量和互斥量的web编程等价物 一般来说,您可以在web编程中使用与任何其他程序相同的线程构造。然而,由于web应用程序运行时间很短(或应该很短),而且线程实际上为短任务增加了一点开销,所以这样做可能不会带来太多好处。请记住,web基础设施通常会

http是无状态的…变量和对象在每个请求中都会被销毁…我们有会话来维护状态

但是线程如何应用于http呢?这是否意味着,如果任意数量的用户都使用一个帐户或试图更新我数据库中的一条记录(我知道DBMS上的锁定),我只能摆弄cookie和会话数据


是否没有信号量和互斥量的web编程等价物

一般来说,您可以在web编程中使用与任何其他程序相同的线程构造。然而,由于web应用程序运行时间很短(或应该很短),而且线程实际上为短任务增加了一点开销,所以这样做可能不会带来太多好处。请记住,web基础设施通常会使用线程或进程以某种并发方式运行web应用程序

线程不以任何方式应用于HTTP。HTTP服务器可以使用线程实现,但它也可以阻止每个请求,直到前一个请求完成


关于对数据库和其他后端系统资源的访问,这并不取决于使用线程、多进程或事件系统的HTTP服务器。

是,如果您在会话中放置太多状态,同一用户在访问同一站点时同时打开多个浏览器窗口,可能会使系统相当混乱

例如,如果您有一个数据输入表单,而不是将数据从一页张贴到另一页(这有一组完全不同的问题,大多数情况下数据可能被篡改),您将输入值放入会话中,当用户三次打开同一表单时,这将遇到问题


我想这只是一个部分解决的问题,有一整套最佳实践。在上面的示例中,您可以在每次打开表单时发出一个新的事务(或对话)id,以便与表单的一个实例关联的任何内容都不会影响其他实例。

我认为您的问题是关于“如何管理并发更新”-如果我错了,请纠正我

对此有很多解决方案,但这里有几个常见的解决方案

1) 最后更新获胜 这是最常见的解决方案。如果两个人正在编辑同一条记录,最后一个按“开始”的人获胜。这在设计上并不常见,但如果您不考虑并发更新,就会发生这种情况

2) 时间戳 您可以对所有数据设置时间戳。当您尝试将数据提交回数据库时,首先检查数据库中的时间戳是否相同。如果信息已更改,您将拒绝更新,因为在此期间其他人已更改了信息

3) 寻找变化 您只能提交用户更改的字段(即,如果您显示的表单上有10个项目,并且它们只更改1个,则您只能将该值存储回数据库)。这背后的逻辑是,如果有人更改了一个不同的字段,您不会通过使用以前的值覆盖它来影响它——如果是他们更改的同一个字段,您的数据在技术上是“更新的”


还有其他解决方案,但这些都很常见。

HTTP和线程是两种不同的东西。大多数HTTP服务器使用线程来“同时”响应多个请求。例如,一个线程可以为响应呈现HTML,而另一个线程等待DB查找一些数据,而第三个线程解码下一个请求

因此,发生的情况是,您在服务器上有一个无状态请求/响应周期和一个状态。为了能够匹配这两个会话来构建会话,应用程序服务器(以HTTP作为通信手段构建)使用会话cookie来识别属于同一会话的请求。否则,它就无法知道他们在和谁说话。IP地址在这里不起作用,因为很多用户可能在代理后面(所以他们都有相同的IP地址)


在应用服务器中,会话cookie中的神奇字符串映射到添加到请求中的会话对象。这允许您在会话中保存会话状态并记住您所在的位置,即使HTTP本身是无状态的。

好的,我从更一般的意义上讲了线程。我说的不是处理器线程,而是与多个用户的并发交互(以及与同一用户的多个对话)。如果这个答案不适用,请随意忽略它。这个真实的例子实际上启发了我。谢谢:)我建议“记住你在哪里”不适用于Cookie,因为每个浏览器只能有一组Cookie,但用户可以打开50个选项卡,然后你就不知道他在哪里了。cookie唯一能做的就是识别用户是谁。其他一切都需要一个逐页传递的对话上下文。cookie标识用户。如果用户打开多个选项卡,那么这可能会破坏会话状态(因为cookie和会话状态之间存在1:1的映射)。