Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Multithreading 多线程客户机-服务器Web服务-使服务器端数据线程安全_Multithreading_Dom_Soap_Client Server_Tcp - Fatal编程技术网

Multithreading 多线程客户机-服务器Web服务-使服务器端数据线程安全

Multithreading 多线程客户机-服务器Web服务-使服务器端数据线程安全,multithreading,dom,soap,client-server,tcp,Multithreading,Dom,Soap,Client Server,Tcp,我正在实现一个多线程web服务。每个传入请求生成一个线程。对于每个客户机,都会创建一个会话,每个会话都包含一个数据部分,比如DOM树。客户端请求基本上是get/set方法,服务器将读取/写入DOM 因此,DOM数据是每个客户端的 现在我的问题是,服务器是否应该将此DOM树视为关键部分 基本上,问题是服务器是否会有两个线程为同一个客户机提供服务 请求/响应是tcp上的SOAP。据我所知,tcp客户端即使是多线程的,也不能同时发送请求。因此,在服务器端,我不会出现两个线程用于同一个客户机的情况。如果

我正在实现一个多线程web服务。每个传入请求生成一个线程。对于每个客户机,都会创建一个会话,每个会话都包含一个数据部分,比如DOM树。客户端请求基本上是get/set方法,服务器将读取/写入DOM

因此,DOM数据是每个客户端的

现在我的问题是,服务器是否应该将此DOM树视为关键部分

基本上,问题是服务器是否会有两个线程为同一个客户机提供服务

请求/响应是tcp上的SOAP。据我所知,tcp客户端即使是多线程的,也不能同时发送请求。因此,在服务器端,我不会出现两个线程用于同一个客户机的情况。如果我错了,请纠正我,我是tcp/ip客户机-服务器编程新手


谢谢。

您应该考虑到,对于较高的请求速率,每个请求的线程都不能很好地扩展,您将失去执行线程切换的大部分时间。

您需要查看服务器的文档。高级服务器很可能允许您配置请求处理策略(例如,顺序、每个连接的线程、每个请求的线程、线程池等)

如果客户端是多线程的,恐怕它可以同时发送请求

据我所知,tcp客户端即使是多线程的,也不能同时发送请求

???那是从哪里来的

在HTTP(当然是基于TCP的)中,需要并发的客户端请求。RFC2616说HTTP客户端(浏览器、REST客户端等)应该将对特定服务器的并发出站请求数量限制为2。但这并不是协议的严格要求,在某些体系结构中,有时故意不遵循此准则

我提出这一点只是为了说明TCP本身支持客户端的多个并发出站请求。在一般情况下,TCP客户端可以打开许多并发出站请求


您正在使用的特定通信框架可能不支持客户端的多个并发出站请求。但那是另一回事。

我想你的意思是创建和销毁线程,在线程之间切换没有问题。但是,这种开销可以通过线程池来解决。线程池有助于解决此问题,但是适当地调整它们的大小是一件麻烦事。无论如何,SOAP会比多线程更快让你陷入困境如果你有10000个请求和10000个线程,你需要更改线程上下文10000次,才能在一台单核机器中处理每个请求、更改上下文、处理堆栈更改导致的缓存故障等等,它只适用于低速率的线程池解决这个问题。此外,如果您有10000个并发请求,那么您可能需要一个具有多个1核的服务器?@Cheeso,仍然不能正确扩展,每个核2核5000个,这不是一个好主意。线程池不能解决这个问题,线程池解决了线程创建开销,这里我们讨论的是线程切换开销