关于接受HTTP请求后流的处理
做了个服务器,接受HTTP请求,将请求进行分析处理,扔给PHP-CGI处理,然后拿到返回信息包装好后写回给浏览器。
但是其中有一个问题不是很清楚,希望有高手解疑下。
比如打开一个网页,同时会发送多个请求,多个请求我由多个线程去处理,但是只要其中一个A线程处理socket的inputstream,比如我打开了输入流进行读的操作,其他线程处理别的请求的输入流操作时就是会处于阻塞状态,只有等A线程完全处理后,由socket写回后,其他的线程才能继续进行,同理就是其实同时只有一个线程是在进行执行状态,其他的都是在等待inputstream阻塞。
我不知道原因是不是同一个端口过来的请求,是不是只能这样处理还是怎么,希望有高手可以回答此问题。
也欢迎大家一起交流下
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
引用来自“hi-alonesword”的答案
看看这里:
http://heikezhi.com/2011/05/11/life-beyond-http-11-googles-spdy/
引用来自“hi-alonesword”的答案
看看这里:
http://heikezhi.com/2011/05/11/life-beyond-http-11-googles-spdy/
看看这里:
http://heikezhi.com/2011/05/11/life-beyond-http-11-googles-spdy/
引用来自“hi-alonesword”的答案
使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。
协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。
引用来自“hi-alonesword”的答案
使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。
协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。
使用的是 http 1.1 的协议吧,看看 http 协议的东东就能明白了。
协议中规定http 请求是 FIFO 的,所以就会出现上述情况。一个阻塞了,其他的就不能执行了。除非修改协议,或用替代协议 spdy 等等。
引用来自“小耶果”的答案
如果物理机器不是多核或多CPU,那么线程上从本质上来讲其实就是一个Contex,处理一下,挂起,同时保存处理时的环境,然后再resume.只是其中的时间片很短造成并行的错觉.所以在一个线程中处理的时间尽量不要超过一个OS时间片的时间,否则使用线程的效率就会下降.当然看你的问题可能是Socket模型的问题或者你的线程使用不当.如果是Windows下最好还是异步Socket+线程池吞吐效率来得比较好.(Complete socket).由于你的描述不够清晰且socket和线程是个巨大的主题,所以只能猜测回答,可能有不周甚至不对的地方
如果物理机器不是多核或多CPU,那么线程上从本质上来讲其实就是一个Contex,处理一下,挂起,同时保存处理时的环境,然后再resume.只是其中的时间片很短造成并行的错觉.所以在一个线程中处理的时间尽量不要超过一个OS时间片的时间,否则使用线程的效率就会下降.当然看你的问题可能是Socket模型的问题或者你的线程使用不当.如果是Windows下最好还是异步Socket+线程池吞吐效率来得比较好.(Complete socket).由于你的描述不够清晰且socket和线程是个巨大的主题,所以只能猜测回答,可能有不周甚至不对的地方
。。求大侠