当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Continuation,引自canonical blog

发表于: 2006-06-07   作者:buaawhl   来源:转载   浏览次数:
摘要: canonical 写了一篇关于continuation的简短精悍的文章,读后收益非浅。 http://www.blogjava.net/canonical/archive/2005/12/12/23406.html 有一次和徐昊(id比较难记,大致形态是...ramindox...)讨论seaside (a smalltalk web framework),讨论seaside对conti
canonical 写了一篇关于continuation的简短精悍的文章,读后收益非浅。
http://www.blogjava.net/canonical/archive/2005/12/12/23406.html

有一次和徐昊(id比较难记,大致形态是...ramindox...)讨论seaside (a smalltalk web framework),讨论seaside对continuation的支持。

我的观点是,continuation的问题之一,在于潜在的性能问题。比session里面放置数据,还要影响性能。

这次终于看到canonical的言论,贴在这里作为理论依据。
canonical 写道

    最近struts和webwork步cocoon和rife的后尘, 相继引入了对web continuation的支持, 在后台程序中实现了对于page flow的完整描述, 这无疑是一些非常有趣的工作. 例如现在我们可以编写
        void onRequest(){
            funcA();
            Input input = sendPageAndWait("collectionInfoFromUser.jsp");
            handleInput(input);
        }
     在调用sendPageAndWait的时候, web框架会保存当前函数调用的continuation, 向用户返回页面collectionInfoFromUser.jsp, 等待用户提交表单之后, web框架重新激活我们所保存的continuation, 继续执行我们的函数. 这种做法与系统调用和线程调度等机制是非常类似的. 
     有些人认为这种基于continuation的方式可以自然的解决在session中保存并清理变量的问题, 这显然是一种大材小用的做法, 而且事实上使用一种通用的continuation 实现很有可能在无意中保存了过多的临时变量, 从而对系统性能造成极大的损害.


另外,后面的这部分令我更加感兴趣。

canonical 写道

有趣的是, 在Mach3.0中对系统线程所作的一项改进即称为continuation, 其动因恰在于避免保留线程堆栈,希望使用完全无状态的continuation函数.(参见Uresh Vahalia的经典著作"UNIX Internals" http://www.china-pub.com/computers/common/info.asp?id=12731).
    在传统的系统调用实现中
    syscall_l(argl)
    {
        ...
        thread_block();
        f2(arg);
        return;
    }
  
    f2(arg){
        ...
        return;
    }

    thread_block()函数会阻塞住当前系统调用过程, 并自动保存所有堆栈变量, 等待内核重新把控制权返回给调用函数. 在使用continuation函数的方式中, 我们需要显式的存取状态变量,
    syscall_1(arg1)
    {
        ...
        save arg1 and any other state information;
        thread_block(f2);  // thread_block(void * (contiuationFunc));
        /* not reached */
    }
  
    f2()
    {
        restore argl and any other state information;
        ...
        thread_syscall_return(status);
    }
    在这种方式中thread_block()并不返回到调用者。线程恢复执行时,内核把控制权传递给f2(). 函数thread_syscall_return()用来从系统调用返回到用户级。"整个过程对用户是透明的,用户所看到的只是从系统调用一个同步返回 ". 在Linux系统内核中所使用的bottom_half机制也是基于类似的原理.


这段讲的大概是系统内核级别对continuation实现的优化。
但似乎在使用上,就不那么透明了,必须显示使用。
"在使用continuation函数的方式中, 我们需要显式的存取状态变量,"

徐昊也提到smalltalk vm对continuation做的一些优化。比如,context (runtime stack)过期清除回收,等。

Continuation,引自canonical blog

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
http://langyu.iteye.com/blog/707713 背景资料 对于当前的很多网络应用,并行访问的用户数会远远超
译注:项目中用到Jetty6的Continuation机制,翻译一篇专业文章用于学习此机制 http://docs.codehaus.o
3 Blog
Blog是个人或群体以时间顺序所作的一种记录,并且不断更新。blog之间的交流主要是通过回溯引用(Trac
Canonical 正式宣布推出 Ubuntu for Android 项目,从官方介绍来看,这个项目并不是要取代 Android
1.概述 jetty的continuation是用于异步处理请求,简单的讲,请求模型不再是一请求一线程,而是在请
作者 周志明 发布于 2011年9月5日 领域 语言 & 开发 主题 Java , 语言 标签 专栏 , <a cl
引言 Jetty的NIO可以有效地减少请求的线程数,但是对于servlet而言,依然是每个servlet需要一个线程
虽在预料之中,但仍让人大吃一惊:Canonical推出了Ubuntu手机。这是一种新的手机操作系统,拥有自己
前一段时间刚来公司,看到一个项目中以前有人写的struts代码。是使用了FormFile来处理关于文件上传的
综合来源: linux.cn & Sina Tech 之前有外媒报导,Canonical公司将于2月21日发布Ubuntu手机操作系
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号