stackless python初體驗

來源:互聯網
上載者:User

標籤:

stackless python真是毀三觀,算斐波那契數列,n為100000(十萬),已耗用時間2。2秒左右這裡寫一下感悟:stackless python從字面上理解就是沒有棧的python,怎麼做到沒有棧呢?基於堆棧的語言是怎麼實現的:1、一般將函數的調用推進棧裡面,後入棧單元計算完之後,先入棧的才能夠完成2、棧裡面的單元怎麼通訊呢?今天剛好做完DDos攻擊的實驗,提醒我了這點:棧的單元通過入口地址和返回地址與它的前後單元通訊。3、棧的厚度有限制,貌似是1000多,就是說,迭代到1000多層就不能繼續進棧了,當然可以將層數認為調高。大概原理就是這樣。 stackless python說,我不要棧!那麼不用棧是怎麼寫程式呢?1、他用一種叫做tasklet的東西代替了堆棧裡面的單元2、這些單元通過一種叫做channel的機制來通訊3、因為不是基於堆棧,所以這些tasklet的數量你想要多少有多少,就像這裡,100000 tasklet又叫做微線程(microthread),所以說,是在python進程裡面的一個線程再分出來的“thread”。它被設計為在各個tasklet之間的切換開銷遠遠小於系統的線程。一個tasklet可以通過往另外一個tasklet的channel來發送資訊,自己進入阻塞狀態,然後啟用另一個tasklet 以斐波那契數列為例:往常,我們使用遞迴求斐波那契數列的時候。。。。。就不說了,大家都懂如果換做stackless的版本呢?堆棧沒了,我們有一個個的tasklet,這些tasklet裡麵包含了一個channel,一個個的tasklet通過將自己的channel傳給下一個tasklet,下一個channel通過將自己的處理結果發送到前一個tasklet的channel裡面實現通訊。 其實如果用“微線程”的方式去理解tasklet,你可以認為,它其實是有“堆棧”的,就像系統層級的線程一樣,但是這個堆棧僅僅是用於調用一個函數,或者說,將這個函數的調用放進一個tasklet裡面。 通過這種方式(其實我不知道自己說明白沒有。。),就形成了一條tasklet鏈,如果我們將他們想象成層疊的形狀,其實跟堆棧的形狀也是挺相似的,但是他們不叫堆棧,叫做tasklet,而且效能比堆棧的效能要好。記住這種工具的名字,它叫做stackless python。 下面是計算斐波那契數列的代碼:import stackless dic = {} def factorial(n):if n == 1:return 1elif n == 2:return 2else:return task(n-1) + task(n-2)  def task(n):if str(n) in dic:return dic[str(n)]chann = stackless.channel()stackless.tasklet(compute)(n,chann)result = chann.receive()dic[str(n)] = resultreturn result def compute(n,chann):return chann.send(factorial(n))  print factorial(100000) 然後用堆棧版本試了一下,先將python堆棧的層數上線改了100000,運行,大概1.3秒到1.5秒,其實stackless與堆棧相比沒有多大優勢。 堆棧版本代碼:import syssys.setrecursionlimit(100000) dic = {} def factorial(n):if n == 1:return 1elif n == 2:return 2elif str(n) in dic:return dic[str(n)]else:a = factorial(n-1)if str(n-1) not in dic:dic[str(n-1)] = ab = factorial(n-2)if str(n-2) not in dic:dic[str(n-2)] = areturn a + b  print factorial(99999) 這裡僅僅講到的是stackless的這麼一種用法,一般stackless的用途還是在替代系統線程這方面,用來做並發有c語言層級的效能,這個以後再做測試

stackless python初體驗

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.