Hacker News

Við tengdum einþráða C++ við fjölþráða ryð

Við tengdum einþráða C++ við fjölþráða ryð Þessi yfirgripsmikla greining á viðmóti býður upp á ítarlega skoðun á kjarnahlutum þess og víðtækari afleiðingum. Lykiláherslusvið Umræðurnar snúast um: Kjarna vél...

9 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Hér er SEO bloggfærslan í heild sinni:

Við tengdum einþráða C++ við fjölþráða ryð

Það er ekki aðeins mögulegt að tengja einn-þráða C++ kóða við fjölþráða ryð – það er ein hagnýtasta leiðin til að nútímavæða eldri kerfi án fullrar endurskrifunar. Við hjá Mewayz tókst á við nákvæmlega þessa áskorun þegar við stækkum 207 eininga viðskiptastýrikerfi okkar til að þjóna 138.000 notendum og niðurstöðurnar breyttu í grundvallaratriðum hvernig við hugsum um samvirkni kerfa.

Hvers vegna myndirðu tengja einn-þráða C++ við fjölþráða ryð?

Flest framleiðslukerfi bera margra ára bardagaprófaðan C++ kóða. Að endurskrifa allt í Rust hljómar aðlaðandi á pappír, en það kynnir gríðarlega áhættu og margra mánaða verkfræðitíma. Raunhæfa nálgunin er stigvaxandi innleiðing - að vefja núverandi C++ rökfræði um leið og samtímis þungu vinnuálagi er hlaðið yfir í eignarhaldslíkan Rust.

Í okkar tilviki höfðu kjarnaviðskiptarökfræðieiningar verið keyrðar á áreiðanlegan hátt í einum þræði C++ í mörg ár. Þeir sáu um röð verkefnavinnslu, skjalagerð og fjárhagsútreikninga. En þegar notendahópur okkar stækkaði yfir 100K, þurftum við samhliða gagnavinnslu, samhliða API meðhöndlun og örugga stjórnun á sameiginlegu ástandi. Rust's Send og Sync eiginleikar gáfu okkur samtímatryggingar sem C++ gæti einfaldlega ekki boðið upp á án víðtækrar handvirkrar endurskoðunar.

Lykilhvatinn er áhættuminnkun. Þú heldur því sem virkar og þú bætir við hvaða mælikvarða - án þess að spila allan kóðagrunninn þinn á flutningi sem gæti aldrei klárast.

Hvernig virka FFI mörkin í raun og veru?

Foreign Function Interface (FFI) milli C++ og Rust starfar í gegnum C-samhæfðar aðgerðaundirskriftir. ytri "C" blokkir Rust afhjúpa aðgerðir sem C++ getur kallað beint, og öfugt. Mikilvæga áskorunin kemur upp þegar margþráður keyrslutími Rust þarf að kalla fram einn-þráða C++ kóða á öruggan hátt.

Við leystum þetta með því að nota sérstakan arkitektúr:

  • Þráðarbundinn C++ framkvæmdastjóri: Öll C++ símtöl eru send í gegnum einn sérstakan þráð með því að nota skilaboðaleið, sem tryggir að einþráða óbreytileiki sé aldrei brotinn.
  • Rust ósamstillt brúarlag: Tokio verkefni senda vinnu til C++ framkvæmdarstjórans og bíður niðurstaðna í gegnum oneshot rásir og heldur Ryð hliðinni algjörlega ósamstilltri.
  • Ógegnsætt bendistjórnun: C++ hlutir eru vafðir inn í Rust structur sem innleiða Drop fyrir ákveðinn hreinsun, sem kemur í veg fyrir minnisleka yfir tungumálamörkin.
  • Raðskipting á mörkum: Flókið gagnaskipulag er sett í raðnúmer í FlatBuffers á FFI-laginu, forðast viðkvæma samsvörun uppsetningar og gerir óháða þróun hvorrar hliðar kleift.
  • Hræðslueinangrun: catch_unwind Rust er umlykur hvern FFI inngangspunkt þannig að læti fari aldrei yfir tungumálamörk, sem væri óskilgreind hegðun.

Þetta mynstur gaf okkur afköst margþráðs ryðs með áreiðanleika sannaðrar C++ rökfræði – án þess að endurskrifa eina línu af upprunalegu viðskiptareglunum.

Hverjar eru stærstu gildrurnar sem þarf að forðast?

Hættulegustu mistökin eru að gera ráð fyrir að C++ kóði sé þráðöruggur þegar hann er það ekki. Alþjóðlegt ástand, kyrrstöðubreytur og símtöl í bókasafni sem ekki koma aftur inn munu valda gagnahlaupum sem þýðandi Rust getur ekki greint yfir FFI-mörkin. Öryggisábyrgð Rust stoppar við óörugga blokkina - allt inni er á þína ábyrgð.

Lykilinnsýn: Ryð tryggir minnisöryggi innan eigin kóða, en um leið og þú ferð yfir FFI mörk inn í C++ erfirðu öll þráðöryggisvandamál sem C++ hefur. Arkitektúrinn í kringum þessi mörk skiptir meira máli en kóðinn beggja vegna þeirra.

💡 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 →

Önnur algeng gildra er ævistjórnun. C++ hlutir taka ekki þátt í lánaafgreiðslukassa Rust. Ef Rust sleppir tilvísun á meðan C++ heldur enn bendi, færðu galla án notkunar eftir að það er hrottalega erfitt að greina. Við brugðumst við þessu með því að framfylgja ströngum merkingarfræði eignarhalds: C++ hlutir eru alltaf í eigu nákvæmlega eins ryðhlífar og sameiginlegur aðgangur fer í gegnum bogabyggða viðmiðunartalningu á ryðhliðinni.

Árangurslega, óhófleg FFI símtöl skapa kostnað vegna samhengisskipta og raðsetningar. Við gerum hópaðgerðir þar sem það er mögulegt, sendum biðröð af verkþáttum til C++ framkvæmdastjóra frekar en að hringja einstök þvert á tungumál.

Hvernig kom þessi nálgun fram í framleiðslu?

Eftir að hafa sett blendingsarkitektúrinn á vettvang okkar mældum við steypubætur. Afköst beiðna jukust um 3,4x fyrir einingar sem áður höfðu flöskuháls í röð C++ vinnslu. Tail leynd (p99) lækkaði um 61% vegna þess að ósamstilltur keyrslutími Rust gat unnið úr sjálfstæðum beiðnum samtímis á meðan C++ annaðist útreikningaþung verkefni á sérstökum þræði.

Það sem meira er um vert, við höfðum engar villur sem tengdar voru samtímis á fyrstu sex mánuðum framleiðslunnar. Mynstrið í þræði gerði það byggingarlega ómögulegt fyrir C++ kóða að vera kallaður frá mörgum þráðum, á meðan tegundakerfi Rust kom í veg fyrir gagnahlaup sitt megin við landamærin. Þetta var umtalsverð framför frá fyrri aðferð okkar við að reyna að bæta þræði við C++ með mutexes, sem hafði framkallað þrjú atvik í keppnisástandi á einum ársfjórðungi.

Verkfræðiteymið tilkynnti einnig um hraðari endurtekningarlotur. Hægt væri að byggja nýja eiginleika í Rust með fullum samhliða stuðningi, á meðan núverandi C++ einingar héldu áfram að keyra án breytinga. Þessi stigvaxandi stefna þýddi að við höfðum aldrei „mikilhvell“ fólksflutninga með mikilli áhættu – bara stöðugar, mælanlegar umbætur.

Algengar spurningar

Getur Rust kallað einþráða C++ bókasöfn án breytinga?

Já, en þú verður að tryggja að öll símtöl í það bókasafn fari úr einum þræði. Staðlað mynstur er að búa til sérstakan executor þráð sem serializes öll C++ símtöl í gegnum rás. Ósamstillt verkefni Rust senda inn beiðnir og bíða svara án þess að loka fyrir margþráða keyrslutímann. C++ kóðinn sjálfur þarfnast ekki breytinga – öryggisþvingunum er framfylgt algjörlega á Ryðhliðinni.

Er kostnaður FFI nógu mikilvægur til að hafa áhrif á frammistöðu forrita?

Einstök FFI símtöl hafa lágmarks kostnaður - venjulega undir 10 nanósekúndum fyrir einfalt aðgerðarkall. Hins vegar bætist við raðgreining á flóknum gagnabyggingum og samstillingu þráða við mörkin ef þú hringir þúsundir fíngerðra símtala. Hópaaðgerðir og notkun núllafrita serialization snið eins og FlatBuffers eða Cap'n Proto heldur kostnaður hverfandi, jafnvel í mælikvarða.

Eigum við að endurskrifa C++ kóðagrunninn okkar í Rust í stað þess að tengjast?

Fyrir flest lið eru stigvaxandi viðmót öruggari og hraðari leiðin. Full umritun kynnir mánaðarlega verkfræðilega áhættu án gildis sem snýr að notendum fyrr en henni er lokið. Samskipti gera þér kleift að senda endurbætur strax, sannreyna Rust nálgunina í framleiðslu og flytja einingar eina í einu miðað við hvar samhliða hefur mest áhrif. Endurskrifaðu aðeins einingarnar þar sem kostnaður við að viðhalda mörkum FFI er meiri en kostnaður við endurritun.


Hjá Mewayz byggjum við upp innviði sem stækkar – bæði tæknilega og rekstrarlega. 207 eininga viðskiptastýrikerfið okkar hjálpar 138.000 teymum að keyra snjallari verkflæði sem byrja á $19/mánuði. Hvort sem þú ert að stjórna verkefnum, gera sjálfvirkan rekstur eða stækka fyrirtæki þitt, þá lagar Mewayz sig að því hvernig þú vinnur. Byrjaðu ókeypis prufuáskrift þína á app.mewayz.com og sjáðu hvað nútíma fyrirtækisstýrikerfi getur gert fyrir teymið þitt.

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