我总是有时间了解延续的特定方面 . 我理解基本概念 - 您可以调用延续来将控制转移到保存延续的位置 .

对于简单的例子,比如REPL语句,这看起来很简单(以Scheme为例):

(+ 5 (call-with-current-continuation 
  (lambda (k) (+ 45 (k 4)))))

将返回9,因为 (+ 45 __) 计算简单地丢失并且调用k "plugs" 4进入 (+ 5 _) .

但是,延续通常用于更复杂的项目,尤其是Web应用程序服务器 . 在此特定上下文中,假设您在处理用户请求时保存了延续 c . 然后,Web服务器继续处理下一个请求,直到控制权传递回 c .

但是在调用 c 之后,创建 c 时整个堆栈将重新出现 . 一旦特定的请求处理程序完成后会发生什么?控制只是返回到应用程序的主要请求处理部分吗?

例如,假设外部循环正在处理来自客户端的请求缓冲区 . 如果我们在处理其中一个请求时保存延续,然后在完全处理缓冲区后调用该延续,则不会导致控制和堆栈返回到处理该请求的点,从而导致处理请求多次?