关于接受HTTP请求后流的处理

发布于 2021-11-02 04:10:38 字数 346 浏览 924 评论 9

做了个服务器,接受HTTP请求,将请求进行分析处理,扔给PHP-CGI处理,然后拿到返回信息包装好后写回给浏览器。
但是其中有一个问题不是很清楚,希望有高手解疑下。
比如打开一个网页,同时会发送多个请求,多个请求我由多个线程去处理,但是只要其中一个A线程处理socket的inputstream,比如我打开了输入流进行读的操作,其他线程处理别的请求的输入流操作时就是会处于阻塞状态,只有等A线程完全处理后,由socket写回后,其他的线程才能继续进行,同理就是其实同时只有一个线程是在进行执行状态,其他的都是在等待inputstream阻塞。
我不知道原因是不是同一个端口过来的请求,是不是只能这样处理还是怎么,希望有高手可以回答此问题。
也欢迎大家一起交流下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

德意的啸 2021-11-08 22:15:27

引用来自“hi-alonesword”的答案

看看这里:
http://heikezhi.com/2011/05/11/life-beyond-http-11-googles-spdy/

你曾走过我的故事 2021-11-08 22:13:43

引用来自“hi-alonesword”的答案

看看这里:
http://heikezhi.com/2011/05/11/life-beyond-http-11-googles-spdy/

野心澎湃 2021-11-08 20:45:02

引用来自“hi-alonesword”的答案

使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。

协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。

囚你心 2021-11-08 19:14:20

引用来自“hi-alonesword”的答案

使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。

协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。

奈何桥上唱咆哮 2021-11-08 09:27:34

使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。

协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。

北笙凉宸 2021-11-06 08:47:22

引用来自“小耶果”的答案

如果物理机器不是多核或多CPU,那么线程上从本质上来讲其实就是一个Contex,处理一下,挂起,同时保存处理时的环境,然后再resume.只是其中的时间片很短造成并行的错觉.所以在一个线程中处理的时间尽量不要超过一个OS时间片的时间,否则使用线程的效率就会下降.当然看你的问题可能是Socket模型的问题或者你的线程使用不当.如果是Windows下最好还是异步Socket+线程池吞吐效率来得比较好.(Complete socket).由于你的描述不够清晰且socket和线程是个巨大的主题,所以只能猜测回答,可能有不周甚至不对的地方

终陌 2021-11-05 18:31:47

如果物理机器不是多核或多CPU,那么线程上从本质上来讲其实就是一个Contex,处理一下,挂起,同时保存处理时的环境,然后再resume.只是其中的时间片很短造成并行的错觉.所以在一个线程中处理的时间尽量不要超过一个OS时间片的时间,否则使用线程的效率就会下降.当然看你的问题可能是Socket模型的问题或者你的线程使用不当.如果是Windows下最好还是异步Socket+线程池吞吐效率来得比较好.(Complete socket).由于你的描述不够清晰且socket和线程是个巨大的主题,所以只能猜测回答,可能有不周甚至不对的地方

复古式 2021-11-03 22:07:45

。。求大侠

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文