我正在寻找一个描述 Web 服务器与编程语言中的“延续”机制的答案。
我的理解是,使用延续,让“pi 的位数”生产者与“pi 的位数”消费者进行通信是微不足道的,而无需显式线程。
我听说过关于 Jetty 延续的好消息。我很好奇别人怎么想。
我可能已经找到了答案,但无论如何我还是在这里问这个问题 - 记录在案。
我正在寻找一个描述 Web 服务器与编程语言中的“延续”机制的答案。
我的理解是,使用延续,让“pi 的位数”生产者与“pi 的位数”消费者进行通信是微不足道的,而无需显式线程。
我听说过关于 Jetty 延续的好消息。我很好奇别人怎么想。
我可能已经找到了答案,但无论如何我还是在这里问这个问题 - 记录在案。
它们与编程语言中的延续相比如何?
除了名字之外,它们没有任何共同之处。它只是一种通过提供用于存储和恢复其状态的 API 来释放当前线程的机制Servlet
,但它完全是手动管理的,而不是真正的延续,其中状态是从当前上下文中自动推断的。
有意义的典型示例是分层(组合)Web 服务,其中一个服务需要向其他服务发出许多请求,并且在发出这些请求时,当前线程被释放。在请求完成后(可以在其他一些线程上异步完成),resume
调用 servlet 的方法,然后将根据请求的结果组装响应。
根据此页面:
一旦规范最终确定,延续将被标准 Servlet-3.0 可暂停请求所取代。Jetty-7 的早期版本现已推出,可实现建议的标准挂起/恢复 API
我还没有使用过 Jetty,但似乎随着继续,服务器不需要为每个客户端保留一个线程,通常当服务器“推迟”(我猜是阻塞)向持续轮询的客户端发送响应时使用 AJAX 时,每个客户端都需要一个线程,这将是一个可伸缩性问题。