2011-03-30 23 views
5

के फायदे मैंने पढ़ा है कि mmap fileinput से फायदेमंद है, क्योंकि यह कर्नेल पेज कैश में एक पृष्ठ पढ़ेगा और पेज को उपयोगकर्ता पता स्थान में साझा करेगा। जबकि, fileinput वास्तव में एक पृष्ठ को कर्नेल में लाता है और उपयोगकर्ता पता स्थान पर एक पंक्ति की प्रतिलिपि बनाता है। तो, fileinput के साथ यह अतिरिक्त अंतरिक्ष ओवरहेड है।mmap vs fileinput

तो, मैं mmap में जाने की योजना बना रहा हूं, लेकिन मैं उन्नत पायथन हैकर से जानना चाहता हूं कि यह प्रदर्शन में सुधार करता है या नहीं?

यदि हां, तो क्या फ़ाइलपूट का एक समान कार्यान्वयन है जो mmap का उपयोग करता है?

यदि आप जानते हैं तो कृपया मुझे किसी भी ओपनसोर्स कोड पर इंगित करें।

धन्यवाद

उत्तर

1

mmap एक फ़ाइल लेता है और रैम में यह चिपक ताकि आप बाइट्स की एक सरणी की तरह या एक बड़ा डेटा संरचना के रूप में सूचकांक यह कर सकते हैं कि।

यदि आप अपनी फ़ाइल को "यादृच्छिक-पहुंच" तरीके से एक्सेस कर रहे हैं तो यह बहुत तेज़ है - यह बहुत से fseek(), fread(), fwrite() संयोजन कर रहा है।

लेकिन यदि आप फ़ाइल को केवल एक बार (कहें) में फ़ाइल पढ़ रहे हैं और प्रोसेस कर रहे हैं, तो यह काफी तेज़ी से होने की संभावना नहीं है। असल में, किसी भी उचित फ़ाइल आकार के लिए (एमएमएपी के साथ याद रखें, यह सब रैम में फिट होना चाहिए - या पेजिंग होता है जो एमएमएपी की दक्षता को कम करने के लिए शुरू होता है) यह शायद अलग नहीं है।

+9

यह गलत है। mmap: ed फ़ाइलों को रैम में फिट करने की आवश्यकता नहीं है - उन्हें प्रक्रिया पता स्थान में फिट करने की आवश्यकता है। 32-बिट प्रक्रिया के लिए उपलब्ध पता स्थान 2-3 जीबी है और 64-बिट प्रक्रिया के लिए बहुत बड़ा है, मशीन में वास्तविक मात्रा में रैम से स्वतंत्र है। 64-बिट पायथन पर, 100 जीबी फ़ाइल को मिटाने के लिए यह बिल्कुल उचित है! –

+1

बाफ, ठीक है, आप सही हैं, मेरा मतलब क्या था "यह उन सभी अक्षमताओं से बचने के लिए रैम में फिट होना चाहिए जिन्हें आप पहली जगह से बचने के लिए mmap का उपयोग कर रहे हैं"। निश्चित रूप से यह एक सरलता का थोड़ा सा है, लेकिन कृपया उचित हो कि मैं अंगूठे का नियम दे रहा हूं यहां एल्गोरिदम – AndrewStone

+3

में स्थानीयकरण के विश्लेषण पर एक पूर्ण ग्रंथ नहीं है, मुझे पूरा यकीन नहीं है कि आप क्या अक्षमता का मतलब रखते हैं। mmap: फ़ाइल में फ़ाइल डिस्क से पूरी फ़ाइल नहीं पढ़ता है। फ़ाइल के केवल हिस्सों में आप वास्तव में एमएमएपी से लौटे ऑब्जेक्ट के साथ पहुंचते हैं। –