日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python lua 性能比较 内存_Lua 的速度为什么比 Python 快?

發布時間:2023/12/19 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python lua 性能比较 内存_Lua 的速度为什么比 Python 快? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究了下Python的代碼,有了一些新的發現。大量的內置字符串常量沒有做Intern優化,在python源碼中搜索形如"__dict__"之類的常量是這么用的:

PyObject* xxxObject = PyObject_GetAttrString(someObject, "__dict__");

這樣會導致每次調用到這里時都會去查找一下有沒有創建過這個字符串。實際上對于腳本虛擬機中這類常量應該提前分配好,直接使用PyObject引用,而不是每次都嘗試去創建一個。要命的是GetAttrString在很多基礎操作中會大量使用…… lua對這些字串則都緩存了起來。

在Python 3之后,python使用了_Py_Identifier緩存了一些靜態名字,使得這部分性能得到了一定的優化。

2. 使用RC和TRACE的GC方案導致需要大量,頻繁地增減計數器。lua沒有這個開銷。

3. Python 中調用函數會把參數打包成一個tuple,頻繁創建和刪除tuple造成比較大的開銷(雖然內部對tuple有緩存機制,但是仍然會增加約10%的消耗)。Python 2中instancemethod會導致重新打包一次tuple再去call,加重了這個問題。實際上由于Python不支持多線程,在有些情況下可以使用復用這些tuples的,沒必要每次都重新創建。lua則直接在lua_State的棧上展開了參數,不需要打包數組。

4. 運算符的調用鏈和需要處理的動態情況過多,導致自定義一個支持運算符的類型的性能極差。相比lua的metatable少量的table查找,python的實現極其復雜。有興趣地童鞋可以看看PyNumber_Add的實現。

5. 對輕類型的支持不好,為了OOP實現得太重了。這一點其他答案說得比較多,這部分主要是內存消耗和是否走GC的差異,在這方面lua的內置類型number/lightuserdata不走gc的優勢很明顯。

6. 虛擬機實現上的差異,lua register-based VM可以讓指令的數量少很多。Python這方面天然比較吃虧且沒有什么簡單的解決辦法。

7. C-API效率上python的api比較難用,而使用封裝好的綁定庫會進一步增加API調用上的開銷。一個簡單地讀取自定義C對象中某個屬性的操作,從發起調用到讀到對應屬性的半程操作中(不算寫回到腳本),Python有80%的時間花費在調用鏈和數據轉換上,相比Lua只有50%左右。

后面的想到再說~

總的來說,如果把腳本語言比作一個垃圾處理站,那么Python就是不管你要扔什么垃圾,統一都通過一個入口倒進去,然后垃圾處理站內部再用復雜的流程去分類處理。而Lua會預設幾個大的門類,常用的紙箱飲料瓶專窗背后直接對接再生制品的工廠,廚余垃圾專窗背后直接對接飼料場,剩下的再走復雜流程。

大多數情況下,來倒垃圾的都在lua預設的那幾個大門類里。

最后貼一下Python和Lua在如下幾個方面實測的效率差異吧,平臺Windows 64Bit:基礎數值計算:Lua速度是Python的10-15倍

與宿主語言交互:Lua速度是Python的3-5倍

字符串操作:兩者差不多

綜合性能:具體取決于代碼中各種操作的比例,實際效果Lua一般在Python的2-4倍之間。

總結

以上是生活随笔為你收集整理的python lua 性能比较 内存_Lua 的速度为什么比 Python 快?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。