延续如何在复杂的应用程序中工作,如Web服务器或GUI应用程序?

时间:2014-07-08 21:06:33

标签: scheme continuations

我总是有时间了解延续的某个方面。我理解基本概念 - 你可以调用一个继续来将控制转移到你保存连续的地方。

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

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

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

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

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

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

0 个答案:

没有答案