gpt4 book ai didi

multithreading - HTTP 1.1 服务器发送大文件

转载 作者:可可西里 更新时间:2023-11-01 17:29:22 25 4
gpt4 key购买 nike

我读过一篇关于使用自定义 HTTP 1.1 服务器为大量客户端提供服务的文章。它说需要使用一个线程池,该线程池的线程数与 CPU 核心数一样多,而不是为每个请求生成一个新线程。但是,假设一个文件有 1 GB 长。它的传输将停止线程池中的队列之一,同时传输文件,停止处理新请求。传输此类文件时肯定会产生一个线程吗?但是应用什么标准来确定是否要生成新线程来服务请求,文件大小?还是其他什么?也许使用了某种形式的协作多任务处理?

最佳答案

每个核心一个队列是一个糟糕的设计。通常,每个池线程都有一个队列和一个全局队列。线程首先检查自己的队列,然后是全局队列,然后是其他线程的队列。没有工作会卡住。

您可以在同一 HTTP 服务器中以混合方式使用阻塞和非阻塞 IO。大多数请求很快完成,因此使用非阻塞 IO 没有多大意义。

让长时间运行的请求使用非阻塞 IO 是个好主意,以免占用太多线程。 1GB 的文件传输听起来确实是个不错的例子。

HTTP 服务器中的套接字 IO 通常应该是非阻塞的。 HTTP 服务器通常在许多连接的客户端和长期连接的假设下运行。做这个规模几乎需要非阻塞IO。但请注意,尽管网络端应该是非阻塞的,但在架构上也不需要使请求处理成为非阻塞的。

套接字服务器有许多过时的设计(包括实现和教程)。使用现代 API 和现代设计,实现可扩展性和良好的代码质量确实不难。

关于multithreading - HTTP 1.1 服务器发送大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40005301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com