9月8日 – 盗梦&复兴

2010-09-09 14:08 by hackerzhou

昨天和陈洋裴璐一起约见了罗婕老师和施晓明老师,一起在复兴教师食堂吃饭,说实话,教师食堂好难吃。。。其实我在复兴的时候就没怎么去吃过食堂,高一还算安分,天天往食堂跑,高二高三就天天往外跑了。半径一两公里的地方应该都去吃过。

因为带着相机就给两位老师拍了几张照片,见 http://photo.hackerzhou.me/index.php?/category/35 ,施老师喜得千金,可惜照片没见着,肯定是个比较可爱的小萝莉。施晓明的话依旧如此的多,如此的奔放,风采不减当年啊。施老师不生儿子誓不罢休的魄力太让我佩服了。。。抓紧造人,据说年龄大了Y染色体活性会减弱。

下午在陈洋彪悍的死缠烂打中罗老师无奈的默许我们听了一节她的课,发现现在的课堂比我们那时候寂静了好多,人少是一个重要的因素,原本一个版都有五十个人左右的,座位都要排到后门边上,现在只有三十来人,2/3的教室都坐不满。男女清一色浅蓝的校服有点不适应,最起码女生也得来点粉红的吧。

下午回到五角场看了盗梦,感觉相当精彩,给我的感觉就是虚拟机的嵌套,晚上康哥跟我说网上有一些别人的影评,其实按照我个人的理解,最后脱落应该会停止,可能也是我个人倾向的缘故,比较喜欢happy ending。这部电影的情节让我想到了栈,想到了虚拟机的嵌套,想到了构造函数和析购函数,能够让我联想到那么多东西的电影着实不多见,强烈建议大家去看。

本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 hackerzhou 并包含 原文链接
发表评论

本文有 5 条评论

  1. hackerzhou
    2010-09-09 18:47


    revlis:

    期待大师正统程序员版影评

    没时间啊,我现在最缺时间了,真想把自己困在第三第四层梦里面

  2. revlis
    2010-09-09 16:34

    期待大师正统程序员版影评

  3. hackerzhou
    2010-09-09 16:30


    revlis:

    本片最主要的设定是什么呢?梦中梦对不对?这在程序的角度来说再直观不过了,那就是——递归,如果做梦是一个函数Dream,那么梦中梦就是该函数的递归调用。
      
      比起一般的递归调用来,该程序的特殊之处是,它是一个多线程的递归调用,也即是说每一次递归都会新建一个线程来执行函数体。因此该递归函数有两种结束机制,一种是wait超时(药物失效),另一种是由其调用函数来结束(kick)。
      
      而由于硬件平台所限,该递归只能进行四层,因为每次递归都需要消耗系统资源,所以递归深一层,系统运行就越慢(梦境每深一层,时间就变慢20倍)。一旦在第四层的时候资源耗尽(做梦者生命耗尽),就会产生栈溢出,因此线程就会进入僵死状态(limbo状态)。
      
      而一旦将运行超时时间设置得过长(强力镇静药物),则会导致子线程运行过长从而耗尽资源。此时如果子线程还没有被上层调用函数强制结束(撞击),则会被detach(在梦中死去),因此进入僵死状态(进入limbo状态)。
      
      而为什么多层次的梦唤醒需要同步撞击呢,这就跟我们析构一个含有指针的STL容器一样,如果不遵守顺序,那么就会出现容器被析构而指针内容还在从而发生内存泄露的问题。
      
      再来解释一下,为什么Cobb在limbo状态能找到所有死去的同伴,同时通过直接自杀直接返回,这里面有两个非常重要的概念,那就是GC和线程池!因为所有的僵死状态的线程都不能被其调用函数结束(kick不到了),因此只能通过垃圾回收机制也就是GC来进行回收,因为在僵死状态下,现场已经没有作用,也无法找到其调用者(在limbo状态下失忆),因此回收的机制就是将该线程杀死,并重新创建以保证线程池中的线程数稳定(这就是为啥在limbo状态下自杀可以在现实中满血复活),而因为线程池是一个全局的结构,当然是可以找到所有的limbo状态的人啦。当然,如果GC算法不够好,无法识别出僵死线程(齐藤失忆),那就发生了资源的泄露(既回不去,也死不了)。
      
      大体设定就这些,然后看看剧情,也就是我们的线程体要怎么写,作为一个盗梦团队,Inception的目的其实跟计算机安全中的缓冲区溢出攻击是同理的,那就是利用程序漏洞(人的性格弱点),向其地址空间(头脑)植入可执行代码(想法),从而可以在对手的系统(大脑)中执行自己的特权指令(解散Fisher的公司)。
      
      而按照剧情中,深层次的意识在浅层次的梦境中将被放大的设定,我们可以将该线程函数体写成如下:
      
      show source
      
      01dream(timer)
      02{
      03 thought = 0;
      04 if(buffer_overflowed)
      05 {
      06 thought = new Thought(I_Want_My_Own_Life);
      07 }
      08 if(thought == 0 )
      09 {
      10 p = new_thread(dream());
      11 wait_for_timer_then_kick(timer * 20, p);
      12 }
      13 else return thought * magnifier;
      14}

    你看看这片写得有没有道理?

    基本不差,对于多线程我持保留意见,意识只能停留在一层梦境里,无法做到多线程并发,等有空我写一个比较好的模拟项目.

  4. revlis
    2010-09-09 16:26

    还有一篇是

    http://www.cio360.net/h/2253/359911-16241.html

    反正我都看不懂

  5. revlis
    2010-09-09 16:17

    本片最主要的设定是什么呢?梦中梦对不对?这在程序的角度来说再直观不过了,那就是——递归,如果做梦是一个函数Dream,那么梦中梦就是该函数的递归调用。
      
      比起一般的递归调用来,该程序的特殊之处是,它是一个多线程的递归调用,也即是说每一次递归都会新建一个线程来执行函数体。因此该递归函数有两种结束机制,一种是wait超时(药物失效),另一种是由其调用函数来结束(kick)。
      
      而由于硬件平台所限,该递归只能进行四层,因为每次递归都需要消耗系统资源,所以递归深一层,系统运行就越慢(梦境每深一层,时间就变慢20倍)。一旦在第四层的时候资源耗尽(做梦者生命耗尽),就会产生栈溢出,因此线程就会进入僵死状态(limbo状态)。
      
      而一旦将运行超时时间设置得过长(强力镇静药物),则会导致子线程运行过长从而耗尽资源。此时如果子线程还没有被上层调用函数强制结束(撞击),则会被detach(在梦中死去),因此进入僵死状态(进入limbo状态)。
      
      而为什么多层次的梦唤醒需要同步撞击呢,这就跟我们析构一个含有指针的STL容器一样,如果不遵守顺序,那么就会出现容器被析构而指针内容还在从而发生内存泄露的问题。
      
      再来解释一下,为什么Cobb在limbo状态能找到所有死去的同伴,同时通过直接自杀直接返回,这里面有两个非常重要的概念,那就是GC和线程池!因为所有的僵死状态的线程都不能被其调用函数结束(kick不到了),因此只能通过垃圾回收机制也就是GC来进行回收,因为在僵死状态下,现场已经没有作用,也无法找到其调用者(在limbo状态下失忆),因此回收的机制就是将该线程杀死,并重新创建以保证线程池中的线程数稳定(这就是为啥在limbo状态下自杀可以在现实中满血复活),而因为线程池是一个全局的结构,当然是可以找到所有的limbo状态的人啦。当然,如果GC算法不够好,无法识别出僵死线程(齐藤失忆),那就发生了资源的泄露(既回不去,也死不了)。
      
      大体设定就这些,然后看看剧情,也就是我们的线程体要怎么写,作为一个盗梦团队,Inception的目的其实跟计算机安全中的缓冲区溢出攻击是同理的,那就是利用程序漏洞(人的性格弱点),向其地址空间(头脑)植入可执行代码(想法),从而可以在对手的系统(大脑)中执行自己的特权指令(解散Fisher的公司)。
      
      而按照剧情中,深层次的意识在浅层次的梦境中将被放大的设定,我们可以将该线程函数体写成如下:
      
      show source
      
      01dream(timer)
      02{
      03 thought = 0;
      04 if(buffer_overflowed)
      05 {
      06 thought = new Thought(I_Want_My_Own_Life);
      07 }
      08 if(thought == 0 )
      09 {
      10 p = new_thread(dream());
      11 wait_for_timer_then_kick(timer * 20, p);
      12 }
      13 else return thought * magnifier;
      14}

    你看看这片写得有没有道理?

发表评论