
Գրքի վերլուծություն. արդյոք զուգահեռ ծրագրավորումը դժվա՞ր է, և ի՞նչ անել
Էնդրյու Հելվերը հրապարակել է Փոլ Է. ՄաքՔենիի անվճար դասագրքի մանրամասն վերլուծությունը զուգահեռ ծրագրավորման մասին՝ ինչն աշխատեց, ինչը՝ ոչ, և որտեղ տեքստը կապված է Linux-ի միջուկին։
Էնդրյու Հելվերը հրապարակել է մանրամասն վերլուծություն Փոլ Է. ՄաքՔենիի անվճար առցանց դասագրքի՝ «Is Parallel Programming Hard, And, If So, What Can You Do About It?»։ ՄաքՔենին Linux-ի միջուկի RCU համաժամացման մեխանիզմի հեղինակն է։ Հելվերը գրքի մեծ մասը կարդացել է ընտանեկան արձակուրդի ընթացքում և նկարագրում է, թե ինչն աշխատեց լավ, ինչը՝ ոչ, և որտեղ տեքստը մնում է Linux-ի միջուկի համատեքստում։
Բաշխված համակարգերից մինչև առանց կողպեքի կոդ
Մեկ տասնամյակ TLA⁺-ի և բաշխված համակարգերի հետ աշխատելուց հետո Հելվերը գրքին անցավ 2026 թվականին Կոլումբիայում (Միսսուրի) կայացած Software Should Work կոնֆերանսից հետո։ Այնտեղ Ֆիլիպ Պիզլոյի հետ զրույցը զուգահեռ, առանց կողպեքի աղբահավաքի բարդության մասին ցույց տվեց, թե որքան քիչ գիտեր նա զուգահեռականության մասին։ Պիզլոն նաև նշեց, որ TLA⁺-ը հարմար չէ բառացիորեն միաժամանակ տեղի ունեցող իրադարձությունների շուրջ դատողությունների համար, և ընդգծեց linearizability-ի կարևորությունը։ Հելվերն ուզում էր գիրք առանց կողպեքի ծրագրավորման մասին, այլ ոչ թե mutex-երի կամ հաղորդագրությունների փոխանցման։
CPU-ի քեշերը, կոմպիլյատորի հնարքները և հաշվիչները
Երրորդ գլուխը՝ «Hardware and its Habits», բացատրում է, թե ինչն է ժամանակակից CPU-ները դարձնում արագ և ինչը՝ դանդաղ, ներառյալ դեպքը, երբ միջուկը գրում է իր քեշում չեղած հասցեին։ MESI համահունչության արձանագրությունը հիշատակվում է միայն հավելվածում, բայց դրա իմացությունը պարզեցնում է մնացածը. x86-ի միջուկները գրում են իրենց քեշերում և պահանջում են քեշ-տողի բացառիկ սեփականություն, ուստի բառացիորեն միաժամանակյա գրառում նույն հասցեին չի լինում — սակայն մի քանի քեշ-տող ընդգրկող գրառումը կարող է պատռվել։
Չորրորդ գլուխը՝ «Tools of the Trade», նկարագրում է, թե ինչ կարող է անել կոմպիլյատորը անփույթ զուգահեռ կոդի հետ՝ բեռնման ու պահպանման պատռվածք, միավորում, կոդի վերադասավորում, հորինված բեռնումներ ու պահպանումներ, store-to-load ձևափոխություններ, մեռած կոդի հեռացում — իսկ հետո գալիս են CPU-ի սեփական անակնկալները։ Հինգերորդ գլուխը՝ «Counting», գրքի գլխավոր մասն է. մոտ տասը եղանակ, թե ինչպես մի քանի թելեր ավելացնում են մեկ հաշվիչ։ Միամիտ ատոմային ինկրեմենտները մերժվում են վատ արագագործության պատճառով, իսկ գլուխն ավարտվում է signal-theft limit counter-ով։ Հելվերին ամենաշատը դուր եկան զանգվածային, յուրաքանչյուր թելի համար առանձին վիճակագրական հաշվիչները. դրանք նման են բաշխված համակարգերի conflict-free replicated datatypes-ին և ցույց են տալիս false sharing-ի գինը։
Եզրակացություն
Հիմնական քննադատությունն այն է, որ օրինակները շատ յուրահատուկ են Linux-ի միջուկին. C++11-ի և C11-ի աշխատանքը հիշողության մոդելների վրա, օրինակ std::memory_order-ը, ստացել է ընդամենը կարճ պարբերություններ, իսկ անվնաս տվյալների մրցավազքի մասին հին բանավեճերը բաց են թողնված։ Առանց կողպեքի ծրագրավորումը գալիս է միայն 14-րդ գլխում, իսկ հիշողության կարգը՝ 15-րդում. այդ ժամանակ նա արդեն արտաքին աղբյուրներ էր ընթերցում։ Ներքին հղումները, որոնք օգտակար են ինքնաստուգման հարցերի համար, անհարմար են էլեկտրոնային ընթերցիչներում։ Ամեն դեպքում Հելվերը դասագիրքը համարում է գերազանց. այն արթնացրել է ավելի շատ սովորելու ցանկություն, և հաջորդ թեման բարձր արտադրողականության աղբահավաքն է։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։