Hacker News

અમે મલ્ટિ-થ્રેડેડ રસ્ટ સાથે સિંગલ-થ્રેડેડ C++ ઇન્ટરફેસ કર્યું છે

અમે મલ્ટિ-થ્રેડેડ રસ્ટ સાથે સિંગલ-થ્રેડેડ C++ ઇન્ટરફેસ કર્યું છે ઇન્ટરફેસનું આ વ્યાપક વિશ્લેષણ તેના મુખ્ય ઘટકો અને વ્યાપક અસરોની વિગતવાર પરીક્ષા આપે છે. ફોકસના મુખ્ય ક્ષેત્રો ચર્ચા આના પર કેન્દ્રિત છે: કોર મેક...

1 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
અહીં સંપૂર્ણ SEO બ્લોગ પોસ્ટ છે:

અમે મલ્ટિ-થ્રેડેડ રસ્ટ સાથે સિંગલ-થ્રેડેડ C++ ઇન્ટરફેસ કર્યું છે

મલ્ટિ-થ્રેડેડ રસ્ટ સાથે સિંગલ-થ્રેડેડ C++ કોડને ઇન્ટરફેસ કરવું માત્ર શક્ય જ નથી — તે સંપૂર્ણ પુનર્લેખન વિના લેગસી સિસ્ટમને આધુનિક બનાવવાની સૌથી વ્યવહારુ રીતોમાંની એક છે. Mewayz ખાતે, અમે 138,000 વપરાશકર્તાઓને સેવા આપવા માટે અમારા 207-મોડ્યુલ બિઝનેસ OSને સ્કેલ કરતી વખતે આ ચોક્કસ પડકારનો સામનો કર્યો, અને પરિણામોએ મૂળભૂત રીતે સિસ્ટમ્સ ઇન્ટરઓપરેબિલિટી વિશે અમે કેવી રીતે વિચારીએ છીએ તે બદલી નાખ્યું.

તમે મલ્ટી-થ્રેડેડ રસ્ટ સાથે સિંગલ-થ્રેડેડ C++ શા માટે ઇન્ટરફેસ કરશો?

મોટાભાગની ઉત્પાદન પ્રણાલીઓ યુદ્ધ-પરીક્ષણ C++ કોડના વર્ષો વહન કરે છે. રસ્ટમાં બધું ફરીથી લખવું એ કાગળ પર આકર્ષક લાગે છે, પરંતુ તે મોટા પ્રમાણમાં જોખમ અને મહિનાના એન્જિનિયરિંગ સમયનો પરિચય આપે છે. વ્યવહારિક અભિગમ એ વધતી જતી અપનાવવાની છે — રસ્ટના માલિકી મોડેલમાં સહવર્તી-ભારે વર્કલોડને ઑફલોડ કરતી વખતે હાલના C++ તર્કને લપેટીને.

અમારા કિસ્સામાં, કોર બિઝનેસ લોજિક મોડ્યુલો વર્ષોથી સિંગલ-થ્રેડેડ C++ માં વિશ્વસનીય રીતે ચાલી રહ્યા હતા. તેઓ ક્રમિક કાર્ય પ્રક્રિયા, દસ્તાવેજ બનાવટ અને નાણાકીય ગણતરીઓ સંભાળતા હતા. પરંતુ જેમ જેમ અમારો વપરાશકર્તા આધાર 100K ની આસપાસ વધતો ગયો તેમ, અમને સમાંતર ડેટા પ્રોસેસિંગ, સમવર્તી API હેન્ડલિંગ અને સુરક્ષિત શેર-સ્ટેટ મેનેજમેન્ટની જરૂર હતી. રસ્ટના મોકલો અને સિંક લક્ષણો અમને કમ્પાઇલ-ટાઇમ કન્કરન્સી બાંયધરી આપે છે કે C++ વ્યાપક મેન્યુઅલ ઑડિટ વિના ઑફર કરી શકતું નથી.

મુખ્ય પ્રેરણા જોખમમાં ઘટાડો છે. તમે જે કામ કરે છે તે રાખો છો, અને તમે કયા સ્કેલ ઉમેરો છો — તમારા સમગ્ર કોડબેઝને સ્થળાંતર પર જુગાર કર્યા વિના જે કદાચ ક્યારેય સમાપ્ત થઈ શકે.

FFI બાઉન્ડ્રી ખરેખર કેવી રીતે કામ કરે છે?

C++ અને રસ્ટ વચ્ચેનું ફોરેન ફંક્શન ઇન્ટરફેસ (FFI) C-સુસંગત ફંક્શન સિગ્નેચર દ્વારા કાર્ય કરે છે. રસ્ટના બાહ્ય "C" બ્લોક્સ એવા કાર્યોને ઉજાગર કરે છે કે જેને C++ સીધો કૉલ કરી શકે છે, અને ઊલટું. જ્યારે રસ્ટના મલ્ટી-થ્રેડેડ રનટાઈમને સિંગલ-થ્રેડેડ C++ કોડ સુરક્ષિત રીતે આમંત્રિત કરવાની જરૂર હોય ત્યારે જટિલ પડકાર ઊભો થાય છે.

અમે સમર્પિત આર્કિટેક્ચરનો ઉપયોગ કરીને આને હલ કર્યું:

  • થ્રેડ-સીમિત C++ એક્ઝિક્યુટર: બધા C++ કૉલ્સને એક જ સમર્પિત થ્રેડ દ્વારા સંદેશ-પાસિંગ ચેનલનો ઉપયોગ કરીને ફનલ કરવામાં આવે છે, તેની ખાતરી કરીને કે સિંગલ-થ્રેડેડ ઇન્વેરિઅન્ટનું ક્યારેય ઉલ્લંઘન થતું નથી.
  • રસ્ટ એસિંક બ્રિજ લેયર: ટોકિયો કાર્યો C++ એક્ઝિક્યુટરને કાર્ય સબમિટ કરે છે અને રસ્ટ સાઇડને સંપૂર્ણપણે અસિંક્રોનસ રાખીને વનશોટ ચેનલો દ્વારા પરિણામો પ્રતીક્ષા કરો કરે છે.
  • અપારદર્શક પોઇન્ટર મેનેજમેન્ટ: C++ ઑબ્જેક્ટ્સ રસ્ટ સ્ટ્રક્ચરમાં લપેટાયેલા છે જે ભાષાની સીમામાં મેમરી લીકને અટકાવવા, નિર્ધારિત સફાઇ માટે ડ્રોપ અમલમાં મૂકે છે.
  • સીરીયલાઇઝેશન એટ બાઉન્ડ્રી: જટિલ ડેટા સ્ટ્રક્ચર્સને FFI લેયર પર ફ્લેટબફર્સમાં સીરીયલાઇઝ કરવામાં આવે છે, નાજુક સ્ટ્રક્ચર લેઆઉટ મેચિંગને ટાળીને અને દરેક બાજુના સ્વતંત્ર ઉત્ક્રાંતિને સક્ષમ કરીને.
  • ગભરાટ અલગતા: રસ્ટનું catch_unwind દરેક FFI એન્ટ્રી પોઈન્ટને લપેટી લે છે જેથી ગભરાટ ક્યારેય ભાષાની સીમાને ઓળંગી ન જાય, જે અવ્યાખ્યાયિત વર્તન હશે.

આ પેટર્નએ અમને સાબિત C++ તર્કની વિશ્વસનીયતા સાથે મલ્ટિ-થ્રેડેડ રસ્ટનું થ્રુપુટ આપ્યું — મૂળ વ્યવસાય નિયમોની એક પણ લાઇન ફરીથી લખ્યા વિના.

સૌથી મોટી મુશ્કેલીઓ ટાળવા માટે શું છે?

સૌથી ખતરનાક ભૂલ એ ધારી લેવું કે C++ કોડ થ્રેડ-સેફ છે જ્યારે તે ન હોય. ગ્લોબલ સ્ટેટ, સ્ટેટિક વેરિએબલ્સ અને નોન-રિએન્ટ્રન્ટ લાઇબ્રેરી કોલ્સ ડેટા રેસનું કારણ બને છે જેને રસ્ટનું કમ્પાઈલર FFI બાઉન્ડ્રીમાં શોધી શકતું નથી. રસ્ટની સલામતીની બાંયધરી અસુરક્ષિત બ્લોક પર અટકે છે — અંદરની દરેક વસ્તુ તમારી જવાબદારી છે.

મુખ્ય આંતરદૃષ્ટિ: રસ્ટ તેના પોતાના કોડમાં મેમરી સલામતીની બાંયધરી આપે છે, પરંતુ જે ક્ષણે તમે C++ માં FFI સીમા પાર કરો છો, ત્યારે તમે C++ ધરાવતી દરેક થ્રેડ-સલામતી સમસ્યાને વારસામાં મેળવો છો. તે સીમાની આસપાસનું આર્કિટેક્ચર તેની બંને બાજુના કોડ કરતાં વધુ મહત્વનું છે.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

બીજી સામાન્ય મુશ્કેલી એ આજીવન વ્યવસ્થાપન છે. C++ ઑબ્જેક્ટ્સ રસ્ટના બોરો ચેકરમાં ભાગ લેતા નથી. જો C++ હજુ પણ પોઈન્ટર ધરાવે છે ત્યારે રસ્ટ કોઈ સંદર્ભ છોડી દે છે, તો તમને ઉપયોગ પછી-મુક્ત બગ્સ મળે છે જેનું નિદાન કરવું નિર્દયતાથી મુશ્કેલ છે. અમે સખત માલિકીના અર્થશાસ્ત્રને લાગુ કરીને આને સંબોધિત કર્યું: C++ ઑબ્જેક્ટ્સ હંમેશા એક જ રસ્ટ રેપરની માલિકીની હોય છે, અને વહેંચાયેલ ઍક્સેસ રસ્ટ બાજુ પર આર્ક-આધારિત સંદર્ભની ગણતરી દ્વારા જાય છે.

પ્રદર્શન મુજબ, વધુ પડતા FFI કૉલ્સ સંદર્ભ સ્વિચિંગ અને સીરીયલાઇઝેશનથી ઓવરહેડ બનાવે છે. અમે જ્યાં પણ શક્ય હોય ત્યાં કામગીરી બૅચ કરીએ છીએ, વ્યક્તિગત ક્રોસ-લેંગ્વેજ કૉલ્સ કરવાને બદલે C++ એક્ઝિક્યુટરને કામની વસ્તુઓની કતાર મોકલીએ છીએ.

આ અભિગમ ઉત્પાદનમાં કેવી રીતે કાર્ય કરે છે?

અમારા પ્લેટફોર્મ પર હાઇબ્રિડ આર્કિટેક્ચરનો ઉપયોગ કર્યા પછી, અમે નક્કર સુધારાઓનું માપન કર્યું. અનુક્રમિક C++ પ્રોસેસિંગમાં અગાઉ અવરોધરૂપ મોડ્યુલો માટે વિનંતી થ્રુપુટમાં 3.4x વધારો થયો છે. ટેલ લેટન્સી (p99)માં 61% ઘટાડો થયો કારણ કે રસ્ટનો અસિંક રનટાઇમ સ્વતંત્ર વિનંતીઓને એકસાથે પ્રક્રિયા કરી શકે છે જ્યારે C++ તેના સમર્પિત થ્રેડ પર ગણતરી-ભારે કાર્યોનું સંચાલન કરે છે.

વધુ અગત્યનું, ઉત્પાદનના પ્રથમ છ મહિનામાં અમારી પાસે શૂન્ય સંમતિ-સંબંધિત ભૂલો હતી. થ્રેડ-કેદની પેટર્નએ બહુવિધ થ્રેડોમાંથી C++ કોડને કૉલ કરવા માટે માળખાકીય રીતે અશક્ય બનાવ્યું, જ્યારે રસ્ટની ટાઇપ સિસ્ટમ તેની સીમાની બાજુમાં ડેટા રેસને અટકાવે છે. મ્યુટેક્સ સાથે C++ પર થ્રેડિંગ ઉમેરવાનો પ્રયાસ કરવાના અમારા અગાઉના અભિગમ કરતાં આ નોંધપાત્ર સુધારો હતો, જેણે એક જ ક્વાર્ટરમાં ત્રણ રેસ-કન્ડિશનની ઘટનાઓ બનાવી હતી.

એન્જિનિયરિંગ ટીમે ઝડપી પુનરાવર્તન ચક્રની પણ જાણ કરી. નવી સુવિધાઓ રસ્ટમાં સંપૂર્ણ સહવર્તી સમર્થન સાથે બનાવી શકાય છે, જ્યારે હાલના C++ મોડ્યુલો ફેરફાર કર્યા વિના ચાલુ રહે છે. આ વધારાની વ્યૂહરચનાનો અર્થ એ થયો કે અમારી પાસે ક્યારેય ઉચ્ચ-જોખમનું "બિગ બેંગ" સ્થળાંતર નથી - માત્ર સ્થિર, માપી શકાય તેવો સુધારો.

વારંવાર પૂછાતા પ્રશ્નો

શું રસ્ટ સિંગલ-થ્રેડેડ C++ લાઇબ્રેરીઓને ફેરફાર કર્યા વિના કૉલ કરી શકે છે?

હા, પરંતુ તમારે એ સુનિશ્ચિત કરવું જ પડશે કે તે લાઇબ્રેરી પરના તમામ કૉલ્સ એક જ થ્રેડથી થાય. પ્રમાણભૂત પેટર્ન એ સમર્પિત એક્ઝિક્યુટર થ્રેડ બનાવવાની છે જે ચેનલ દ્વારા તમામ C++ કૉલ્સને ક્રમાંકિત કરે છે. રસ્ટના એસિંક કાર્યો મલ્ટિ-થ્રેડેડ રનટાઇમને અવરોધિત કર્યા વિના વિનંતીઓ સબમિટ કરે છે અને પ્રતિસાદોની રાહ જુએ છે. C++ કોડને જ કોઈ ફેરફારની જરૂર નથી — સુરક્ષા અવરોધ સંપૂર્ણપણે રસ્ટ બાજુ પર લાગુ કરવામાં આવે છે.

શું FFI ઓવરહેડ એપ્લીકેશન પ્રદર્શનને અસર કરવા માટે પૂરતું નોંધપાત્ર છે?

વ્યક્તિગત FFI કૉલ્સમાં ન્યૂનતમ ઓવરહેડ હોય છે — સામાન્ય રીતે સામાન્ય ફંક્શન કૉલ માટે 10 નેનોસેકન્ડની અંદર. જો કે, જટિલ ડેટા સ્ટ્રક્ચર્સનું સીરીયલાઇઝેશન અને બાઉન્ડ્રી પર થ્રેડ સિંક્રોનાઇઝેશન ઉમેરે છે જો તમે હજારો ફાઇન-ગ્રેઇન્ડ કૉલ્સ કરો છો. બેચિંગ ઓપરેશન્સ અને ફ્લેટબફર્સ અથવા કેપન પ્રોટો જેવા શૂન્ય-કોપી સીરીયલાઇઝેશન ફોર્મેટનો ઉપયોગ સ્કેલ પર પણ ઓવરહેડ નગણ્ય રાખે છે.

શું આપણે ઇન્ટરફેસિંગને બદલે રસ્ટમાં અમારા C++ કોડબેઝને ફરીથી લખવું જોઈએ?

મોટાભાગની ટીમો માટે, ઇન્ક્રીમેન્ટલ ઇન્ટરફેસિંગ એ સુરક્ષિત અને ઝડપી રસ્તો છે. પૂર્ણ પુનઃલેખન પૂર્ણ ન થાય ત્યાં સુધી કોઈ વપરાશકર્તા-સામનો મૂલ્ય વગરના એન્જિનિયરિંગ જોખમના મહિનાઓનો પરિચય આપે છે. ઇન્ટરફેસિંગથી તમે તરત જ સુધારાઓ મોકલી શકો છો, ઉત્પાદનમાં રસ્ટ અભિગમને માન્ય કરી શકો છો અને એક સમયે એક પછી એક મોડ્યુલોને સ્થાનાંતરિત કરી શકો છો જ્યાં સહવર્તી અસર સૌથી વધુ અસર પહોંચાડે છે. ફક્ત તે જ મોડ્યુલોને ફરીથી લખો જ્યાં FFI બાઉન્ડ્રી જાળવવાનો ખર્ચ પુનઃલેખનના ખર્ચ કરતાં વધી જાય.


મેવેઝમાં, અમે ઇન્ફ્રાસ્ટ્રક્ચર બનાવીએ છીએ જે સ્કેલ કરે છે — તકનીકી અને કાર્યકારી રીતે. અમારું 207-મોડ્યુલ બિઝનેસ OS $19/મહિનાથી શરૂ થતા 138,000 ટીમોને વધુ સ્માર્ટ વર્કફ્લો ચલાવવામાં મદદ કરે છે. ભલે તમે પ્રોજેક્ટ્સનું સંચાલન કરી રહ્યાં હોવ, ઑપરેશનને સ્વચાલિત કરી રહ્યાં હોવ અથવા તમારા વ્યવસાયને સ્કેલિંગ કરી રહ્યાં હોવ, Mewayz તમે જે રીતે કામ કરો છો તેને અનુકૂળ કરે છે. app.mewayz.com પર તમારી મફત અજમાયશ શરૂ કરો અને જુઓ કે આધુનિક વ્યવસાય OS તમારી ટીમ માટે શું કરી શકે છે.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime