ፌስቡክ ክፍት ምንጭ ሲንደር፣ ኢንስታግራም ጥቅም ላይ የሚውል የCPython ሹካ

ፌስቡክ የፒቲን ፕሮግራሚንግ ቋንቋ ዋና ማጣቀሻ ትግበራ የሆነውን የ CPython 3.8.5 ሹካ የሆነውን የፕሮጀክት ሲንደር ምንጭ ኮድ አሳትሟል። ኢንስታግራምን ለማንቀሳቀስ Cinder በፌስቡክ የምርት መሠረተ ልማት ውስጥ ጥቅም ላይ ይውላል እና አፈፃፀሙን ለማሻሻል ማመቻቸትን ያካትታል።

ኮዱ የታተመው የተዘጋጁትን ማሻሻያዎች ወደ ዋናው የ CPython ማዕቀፍ ማስተላለፍ እና ሌሎች የCPython አፈጻጸምን ለማሻሻል የሚረዱ ፕሮጀክቶችን ለማገዝ ነው። Facebook የተለየ ክፍት ምንጭ ፕሮጀክት መልክ Cinder ለመደገፍ አስቦ አይደለም እና ኮድ ተጨማሪ combing እና ሰነድ ያለ, ኩባንያው መሠረተ ልማት ውስጥ ጥቅም ላይ በሚውልበት ቅጽ ውስጥ ቀርቧል. እንዲሁም Cinderን እንደ ሲፒቶንን እንደ አማራጭ ለማስተዋወቅ አይሞክሩም - ዋናው የእድገት ግብ CPython እራሱን ለማሻሻል ፍላጎት ነው.

የሲንደር ኮድ በትክክል አስተማማኝ እና በአምራች አካባቢዎች ተፈትኗል ነገር ግን ችግሮች ከተለዩ ፌስቡክ ለውጫዊ የስህተት መልዕክቶች ምላሽ እንደሚሰጥ እና ጥያቄዎችን እንደሚጎትት ዋስትና ስለማይሰጥ እርስዎ እራስዎ መፍታት አለብዎት ። በተመሳሳይ ጊዜ ፌስቡክ ከማህበረሰቡ ጋር ገንቢ ትብብርን አያጠቃልልም እና ሲንደርን በፍጥነት እንዴት ማድረግ እንደሚቻል ወይም የተዘጋጁ ለውጦችን ወደ ሲፒቶን ዋና ክፍል እንዴት ማስተላለፍ እንደሚቻል ሀሳቦችን ለመወያየት ዝግጁ ነው ።

በሲንደር ውስጥ የተተገበሩ ዋና ማሻሻያዎች፡-

  • የባይቴኮድ የመስመር ላይ መሸጎጫ ("shadow bytecode")። የስልቱ ፍሬ ነገር አንድ የተለመደ ኦፕኮድ የሚተገበርበትን ሁኔታ መለየት እና ማመቻቸት እና እንደዚህ አይነት ኦፕኮድ በተለዋዋጭ ፈጣን ልዩ አማራጮች መተካት ነው (ለምሳሌ ተደጋግሞ የሚባሉ ተግባራትን መተካት)።
  • ጉጉ ኮሮቲን ግምገማ። ለተመሳሳይ ተግባር ጥሪ ወዲያውኑ (መጠበቅ መጠበቅን አያመጣም እና ተግባሩ ቀደም ብሎ ወደ መመለሻ መግለጫው ይደርሳል) የእንደዚህ ዓይነቶቹ ተግባራት ውጤት ኮሮቲን ሳይፈጥር ወይም የክስተት ዑደትን ሳያካትት በቀጥታ ይተካል። አሲንክ/በመጠባበቅን በከፍተኛ ሁኔታ በሚጠቀም የፌስቡክ ኮድ ውስጥ ማመቻቸት ወደ 5% ገደማ ፍጥነትን ያመጣል.
  • በግለሰብ ዘዴዎች እና ተግባራት (ዘዴ-በአንድ-ጊዜ) ደረጃ ላይ የተመረጠ የጂአይቲ ስብስብ. በ "-X jit" አማራጭ ወይም በ PYTHONJIT=1 አካባቢ ተለዋዋጭ በኩል የነቃ እና ብዙ የአፈፃፀም ሙከራዎችን በ1.5-4 ጊዜ ለማፋጠን ያስችላል። የጂአይቲ ማጠናቀር በተደጋጋሚ ለሚፈጸሙ ተግባራት ብቻ የሚጠቅም በመሆኑ ብዙም ጥቅም ላይ ያልዋሉ ተግባራትን መጠቀም ተገቢ አይደለም፣የዚህም ስብስብ የፕሮግራም አፈፃፀምን ብቻ ይቀንሳል።

    በ"-X jit-list-file=/path/to/jitlist.txt" ወይም የአካባቢ ተለዋዋጭ "PYTHONJITLISTFILE=/path/to/jitlist.txt" በሚለው አማራጭ በኩል JIT የተግባር ዝርዝር የያዘ ፋይል መግለጽ ትችላለህ። መጠቀም ይቻላል (የመንገድ ቅርጸት .to.module:funcname or path.to.module:ClassName.method_name)። JIT መንቃት ያለበት የተግባር ዝርዝር በመገለጫ ውጤቶቹ ላይ ሊወሰን ይችላል። ለወደፊቱ ፣ ለተግባር ጥሪዎች ድግግሞሽ ውስጣዊ ትንተና ላይ በመመርኮዝ ለተለዋዋጭ የጂአይቲ ማጠናቀር ድጋፍ ይጠበቃል ፣ ግን በ Instagram ላይ የማስጀመር ሂደቶችን ልዩ ግምት ውስጥ በማስገባት ፣ JIT ማጠናቀር እንዲሁ በመነሻ ደረጃ ላይ ለፌስቡክ ተስማሚ ነው።

    ጂአይቲ በመጀመሪያ Python ባይትኮድን ወደ ከፍተኛ ደረጃ መካከለኛ ውክልና (HIR) ይለውጠዋል፣ እሱም ከፓይዘን ባይትኮድ ጋር በጣም ቅርብ ነው፣ ነገር ግን ከተደራራቢ ይልቅ በመመዝገቢያ ላይ የተመሰረተ ቨርቹዋል ማሽንን ለመጠቀም የተነደፈ እና እንዲሁም የአይነት መረጃን እና ተጨማሪ ነገሮችን ይጠቀማል። የአፈጻጸም-ወሳኝ ዝርዝሮች (እንደ ማጣቀሻ ቆጠራ) . ከዚያ HIR ወደ SSA (static single assignment) ቅፅ ይቀየራል እና የማጣቀሻ ቆጠራ ውጤቶችን እና የማህደረ ትውስታ ፍጆታ ውሂብን ያገናዘበ የማሻሻያ ደረጃዎችን ያልፋል። በውጤቱም, ዝቅተኛ-ደረጃ መካከለኛ ውክልና (LIR) ይፈጠራል, ለስብሰባ ቋንቋ ቅርብ. LIR ላይ የተመሰረቱ ማሻሻያዎች ከሌላው ምዕራፍ በኋላ፣ የአስምጂት ቤተ-መጽሐፍትን በመጠቀም የመሰብሰቢያ መመሪያዎች ይፈጠራሉ።

  • ለሞጁሎች ጥብቅ ሁነታ. ተግባራዊነቱ ሶስት አካላትን ያካትታል፡-StrictModule ይተይቡ። የአንድ ሞጁል አፈፃፀም ከዚያ ሞጁል ውጭ በኮድ ላይ ምንም ተጽእኖ እንደሌለው የሚወስን የማይንቀሳቀስ ተንታኝ። ሞጁሎቹ በጥብቅ ሁነታ ላይ መሆናቸውን የሚወስን ሞጁል ጫኝ (ኮዱ "ማስመጣት __sstrict__") ከሌሎች ሞጁሎች ጋር መገናኛዎች አለመኖራቸውን ያረጋግጣል እና ጥብቅ ሞጁሎችን ወደ sys.modules እንደ StrictModule ነገር ይጭናል.
  • Static Python በጂአይቲ ስብስብ ምስጋና ይግባውና በፍጥነት የሚሰራ አይነት-ተኮር ባይት ኮድ ለማመንጨት የአይነት ማብራሪያዎችን የሚጠቀም የሙከራ ባይትኮድ ማጠናከሪያ ነው። በአንዳንድ ሙከራዎች፣ የስታቲክ ፓይዘን እና የጂአይቲ ጥምረት ከመደበኛ ሲፒቶን ጋር ሲነጻጸር እስከ 7 ጊዜ የሚደርስ የአፈጻጸም ማሻሻያዎችን ያሳያል። በብዙ ሁኔታዎች፣ ውጤቶቹ የMyPyC እና Cython ማጠናቀቂያዎችን ለመጠቀም ቅርብ እንደሆኑ ይገመታል።

ምንጭ: opennet.ru

አስተያየት ያክሉ