Process vs Threads, Hardware Threads vs Software Threads- ը Այսօր ամենամեծ եւ հզոր ծրագրային ապահովման աշխարհում Եթե դուք ստեղծում եք իրական ժամանակի առեւտրային մեքենա, խաղային մեքենա, կամ պարզ կայքի սերվեր, իմանալ, թե ինչպես է գործառույթներ կատարում միասին կարող է մեծապես բարելավել կատարումը եւ օգտագործող փորձը. Դա խաղում է. concurrency threading Նախորդ բլոգում, մենք ուսումնասիրել ենք եւ տարբեր — multithreading եւ առաջադեմ parallelism- ի հիմնական բաղադրիչները. Այժմ, երբ մենք տեղադրել ենք բաղադրիչները, այն ժամանակն է, որ պետք է վերցնել իմանալականությունը եւ վերցնել հիմնական հարցը: Եթե դուք դեռ չեք կարդացել այդ նախորդ պատմություններները, ես հեշտությամբ առաջարկում եմ, որ ստուգեք նրանց առաջինը ավելի լավ բուժման համար: Flynn- ի Taxonomy մասին Parallel Programming մոդելներ Ո՞վ է ճշգրիտ մի thread, եւ ինչ է այն անել? Flynn- ի Taxonomy մասին Flynn- ի Taxonomy մասին Parallel Programming մոդելներ Parallel Programming մոդելներ Ո՞վ է ճշգրիտ մի thread, եւ ինչ է այն անել? Download files while updating the UI, calculate results while responding to user input, or process incoming network requests in parallel. Պաշտոնական CPUs support multiple requests. , եւ ծրագրային լեզուներ, ինչպիսիք են C++- ը, ապահովում են հզոր գործիքներ, որոնք կարող են օգտագործել նրանց. Threading- ը թույլ է տալիս ծրագրերը մեկ անգամ անել ավելի քան մեկ բան: hardware threads Threading- ը թույլ է տալիս ծրագրերը մեկ անգամ անել ավելի քան մեկ բան: Եթե դուք նոր եք multithreading- ում, կամ ցանկանում եք խոշորել ձեր հիմնադրամները, այս պատմությունը կօգնի ձեզ մի խոշոր սկսել: Լավացրեք գծերի աշխարհը եւ բացել parallel execution- ի հզորությունը: Highlights: Threads vs processes HTTP Hardware threads vs Software Threads HTTP Hyperthreading HTTP Fork/join threading մոդել What Is a Thread? Ի՞նչ է Thread- ը Մեկը առաջին խոշորություններների համար, որոնք սկսում են սովորել concurrency- ի մասին, այն է, որ իմանալ, որ . difference between a thread and a process ա Արդյոք, երբ դուք սկսում եք բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջջային բջջային բջջջային բջջջային բջջային բջջջային բջջջային բջջջային բջջջային բջջջային բջջային բջջջային բջջջային բջ process ա , այլն, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին, միասին: եւ Եթե այն անում են լավ. thread race conditions synchronization issues Հիմնականում, դուք կարող եք մտածել, որ մի thread որպես a — ինտեգրված օպերացիոն օպերացիոն ինտեգրված օպերացիոն ինտեգրված օպերացիոն Հիմա եւ Բայց միասին Մինչեւ այլ բաղադրիչները նույն գործընթացում են. lightweight process program counter registers stack heap and global memory Երբ խոսում են սերտիֆիկների մասին, կարեւոր է տարբերել եւ Մինչեւ երկու բաները խոսում են «հարկման միավորների» մասին, նրանք աշխատում են տարբեր մակարդակներում համակարգչային պտուտակում: hardware threads software threads What is a Hardware Thread? Ի՞նչ է Hardware Thread- ը ա Արդյո՞վ է execution stream Այսպիսով, դա ճիշտ է a Արդյոք, այն կարող է վերցնել, decoding, եւ կատարել մի ռեժիմ ուղեցույցներ ինքներդ. hardware thread directly supported by the processor dedicated control unit Հիմնական ժամանակ, — այլն, մեկ վերահսկողություն սարքավորումներ մեկ ֆիզիկական CPU-ի համար: Մեկ սարքավորումների համար, որոնք ունեն մի քանի սարքավորումներ (մպ. server motherboards), պետք է Այս մեթոդը արագ զարգացվել է, երբ տեղադրվել է եւ Արդյունքներ one processor equaled one hardware thread one hardware thread per socket multi-core multi-threaded Այլ ժամանակակից CPU-ի համար: Ամեն սերտիֆիկը ներառում է միայն մեկ սերտիֆիկը: Բացի այդ, Intel- ի տարբերակը, որը կոչվում է Hyper-Threading (SMT), կարող է աջակցել բազմաթիվ սարքավորումներ: Այժմ, մեկ processor (socket) կարող է լինել բազմաթիվ սերտիֆիկներ, եւ յուրաքանչյուր սերտիֆիկը կարող է լինել բազմաթիվ սարքավորումների սերտիֆիկներ: Բացի այդ, համոզվածության համար, շատ Այսպիսով, երբ դուք ստուգում եք ձեր CPU տեղեկությունները համակարգի գործիքների միջոցով, ցույց է տալիս, որ «բրոցեսորների» չափը կարող է նշանակել լոգիական մետաղադրամներ, ոչ թե ֆիզիկական մետաղադրամներ կամ մետաղադրամներ: operating systems report hardware threads or logical cores as “processors.” Ինչպե՞ս կարող եմ վերահսկել, թե ինչպիսիք են իմ Hardware Threads- ը: Windows-ը Windows-ը Windows- ում բջջային սարքավորումների մետաղադրամների բազմաթիվ մեթոդներ են, բայց չեք վախենում, դա ոչ մի այդ «10 մեթոդների, որոնք պետք է անել» բլոգը. Օգտագործման Head to The Tab եւ Select . Task Manager Ctrl + Shift + Esc Performance CPU Դուք կարող եք տեսնել մի վերլուծություն, որը ներառում է մի շարք եւ (Անհարկե, hardware threads) Դա տեսնում է ինչ-որ բան այսպես: cores logical processors Այլ տարբերակներ, եթե ցանկանում եք բացահայտել ձեր սեփական: PowerShell: Alternative 1: Ապրիլ 1 : (Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors Command Prompt (requires wmic): Alternative 2: Նկարագրություն 2: wmic cpu get NumberOfLogicalProcessors,NumberOfCores 2. Լինոֆիլմ 2. Լինոֆիլմ Եթե դուք օգտագործում եք Linux- ի ցանկացած գեղեցկությունը, ձեր համակարգի կարգավիճակը եւ սարքի գծերի չափը կարող եք ստուգել, կարդալով Արդյոք, այս ֆայլը տեսնում է այս տեսակը: /proc/cpuinfo ~$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 183 model name : 13th Gen Intel(R) Core(TM) i5-13450HX stepping : 1 microcode : 0xffffffff cpu MHz : 2611.201 cache size : 20480 KB physical id : 0 siblings : 16 core id : 0 cpu cores : 8 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 28 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves avx_vnni vnmi umip waitpkg gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear serialize flush_l1d arch_capabilities vmx flags : vnmi invvpid ept_x_only ept_ad ept_1gb tsc_offset vtpr ept vpid unrestricted_guest ept_mode_based_exec tsc_scaling usr_wait_pause bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs retbleed eibrs_pbrsb rfds bhi bogomips : 5222.40 clflush size : 64 cache_alignment : 64 address sizes : 39 bits physical, 48 bits virtual power management: ... Մի քանի բան պետք է նշեք այս մասին: CPU- ի սերտիֆիկները: Սա կարող է խուսափել հիդրավլիկ սերտիֆիկների համար, քանի որ այս թվը կարող է ոչինչ բացահայտել իրական սերտիֆիկը (մասթ., իմ Intel i5-13 Generation- ի 10 սերտիֆիկները: 6 P- ի սերտիֆիկները + 4 E- ի սերտիֆիկները, բայց այն ցույց է տալիս 8 սերտիֆիկները): Արդյոք, դա նշանակում է, որ միասին միասին միասին միասին միասին միասին միասին: HTC- ի լոգին (լոգին Hyper-Threading) հավատում է, որ SMT- ը աջակցվում է: Այս կարգի մի քանի տարբերակներ են, որոնք նաեւ ապահովում են ավելի ճշգրիտ արտադրանքը: Արդյունք 1: lscpu Արդյունք 1: lscpu Ես ստանում եմ հետեւյալ արտադրանքը : lscpu ~$ lscpu | grep -E 'Core|Socket|Thread' Model name: 13th Gen Intel(R) Core(TM) i5-13450HX Thread(s) per core: 2 Core(s) per socket: 8 Socket(s): 1 Ապրիշը 2: Hwloc (Lstopo) Ապրիշը 2: Hwloc (Lstopo) Another useful tool for inspecting your system's CPU topology is the popular Linux գործիք , որը ապահովում է ձեր hardware layout- ի միասին Command-line եւ Graphic representations- ի համար: Դա հատկապես հարմար է հոսքի, hardware threads- ի, cache level- ի եւ NUMA nodes- ի տեսանյութերի համար: hwloc Եթե hwloc- ը արդեն տեղադրված է, դուք կարող եք ստեղծել ձեր համակարգի դիզայնի տեսական քարտեզ Տեղադրություն : lstopo Ի՞նչ է Hyper-Threading Hyper-Threading (HT)- ը Intel- ի միասնական Multithreading- ի (SMT) տեղադրումը է, որը թույլ է տալիս յուրաքանչյուր ֆիզիկական սերտիֆիկը միասին կատարել երկու ուղարկային ռեժիմներ: Երբ մեկ սերտիֆիկը կանգնած է (պասկածում է մանրամասը), այլը կարող է օգտագործել կատարման միավորները: Այսպիսով: Լավագույն CPU օգտագործումը - Լավագույն կատարումը I/O-bound կամ multitasking աշխատանքային բեռնություններում ⚠ Բայց: Դա ոչինչ չի կասկածում կատարումը - տպավորական կասկածումներ են մոտ 15-30% - ում: Հիմնական հոդված՝ Parallel Programming: Երբ HT- ը բարելավում է ամենօրյա multitasking- ը (մպիսով, մի քանի ծրագրերի կատարման համար laptop- ում), ապա դա կարող է բուժել HPC- ի գործառույթը կամ միասնական աշխատանքային տպագրերի կատարումը: Մի քանի խոշոր տպագրերի կատարումը միասին սերտիֆիկի վրա կարող է վերականգնել սերտիֆիկը եւ նվազեցնել արագությունը: Այսպիսով, շատ HPC- ի կենտրոնները ստուգում են HT- ը ստուգման համար: SMT համակարգերի վրա կարեւոր է խոշոր տպագրական տպագրություն: Տեսակ — i5–13450HX 6 P-cores հետ HT → 12 մետաղեր 4 E-Cores առանց HT → 4 մետաղադրամներ ➡️ Ընդհանուր = 16 ռեժիմային գծեր What is Hyper-Threading? Hyper-Threading (HT)- ը Intel- ի Simultaneous Multithreading (SMT) գործառույթն է, որը թույլ է տալիս յուրաքանչյուր ֆիզիկական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական մետաղական Երբ մեկ մետաղադրամը կանգնած է (հարկե, կանգնած է մետաղադրամը), մյուսը կարող է օգտագործել կատարման միավորները: Այսպիսով: two instruction streams Լավագույն CPU օգտագործումը - Լավագույն կատարումը I/O-bound կամ multitasking աշխատանքային բեռնություններում : Դա ոչինչ չի կկտրում կատարումը - տպավորային ստանդարտները մոտ են . But 15–30% Caution for parallel programming: Երբ HT- ը օգնում է ամենօրյա multitasking- ում (հարկե, մի քանի ծրագրեր կատարելու համար laptop- ում), այն կարող է Մի քանի խոշոր մետաղադրամներ, որոնք աշխատում են միասին մետաղադրամների վրա, կարող են Բարձր արագությունը, ինչու է դա — Պահպանված մետաղադրամը կարեւոր է SMT համակարգերի վրա: negatively affect performance in HPC or parallel workloads resource contention many HPC centers disable HT by default Example — i5–13450HX: 6 P-cores հետ HT → 12 մետաղեր 4 E-Cores առանց HT → 4 մետաղադրամներ ➡️ Total = 16 logical threads Understanding Software Threads: The Foundation Software Threads: The Foundation- ը Արդյոք, քանի որ սարքավորումների սարքավորումներ, որոնք ապրում են processor- ի մակարդակի, ծրագրային սարքավորումներ են Նրանք ներքեւում են անմիջապես անմիջապես արտադրական գործառույթներ. . programming abstractions Ծրագրային մետաղադրամը հիմնականում մի հեշտ կատարման միավորն է, որը տեղադրվում է մի գործընթացում, որը համատեղում է միասին գրասենյակային տարածքը, իսկ պահպանում է իր սեփական կատարման մետաղադրամը: Ծրագրային մետաղադրամը հիմնականում մի հեշտ կատարման միավորն է, որը տեղադրվում է մի գործընթացում, որը համատեղում է միասին գրասենյակային տարածքը, իսկ պահպանում է իր սեփական կատարման մետաղադրամը: Երբ դուք ստեղծում եք ծրագրային սարքի ձեր կոդըում, օպերացիոն համակարգը եւ Runtime- ը աշխատում են միասին, որպեսզի այն հասանելի է: Այս մոդելը պլանավոր է եւ ներառում է սեղմիչը, որը որոշում է, երբ եւ որտեղ յուրաքանչյուր սեղմիչ կատարվում է: Hardware սարքավորումներ Hardware սարքավորումներ Ծրագրային եւ սարքի մետաղադրամների տարբերությունը կարեւոր է: Hardware մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադր Ծրագրային եւ սարքի մետաղադրամների տարբերությունը կարեւոր է: Hardware մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադրամները մետաղադր The Evolution From Processes to Threads Արդյունաբերական մշակույթից պրոֆեսուրսների մեջ Ինչպե՞ս կարող ենք հասկանալ, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել, թե ինչպե՞ս պետք է վերլուծել: One execution stream, որը կատարվում է միասին Բարձր բաղադրիչը: Հիմնական բաղադրիչները, բաղադրիչները եւ բաղադրիչները Հիմնական հոդված՝ Inter-Process Communication (IPC) մեթոդների միջոցով Բարձր ռեսուրսների ծախսերը, քանի որ ամբողջական գործընթացը ծախսում է Threading- ը տեղադրվել է այս գործընթացային կենտրոնացած մոդելի սահմանափակների լուծման համար, որը թույլ է տալիս ավելի մանրամասային համեմատություն: Threads- ը առաջարկում է մի քանի հիմնական առավելությունները: Simplified Data Sharing Unlike processes, threads within the same process . This eliminates the need for complex IPC mechanisms and allows for more efficient communication between concurrent execution units. share the same address space, heap, and global variables Պահպանված տվյալների փոխանակման Resource Efficiency Creating a thread requires significantly fewer resources than creating a process. , while process creation involves duplicating the entire parent process address space. Thread creation typically requires only 64KB for the thread’s private data area and two system calls Ապրանքների արդյունավետությունը Enhanced Responsiveness Threads enable patterns that are essential for modern applications. Consider a web browser: one thread handles the user interface, another manages network requests, while others handle rendering and background tasks. This separation ensures that the interface remains responsive even when heavy operations are running. asynchronous behavior Բարձրացվել է պատասխանատվությունը Operating System Level Scheduling Threads still benefit from OS-level scheduling features, including (the ability to interrupt a thread) and fair progress guarantees among threads. This provides the balance between user control and system management. preemption Օպերացիոն համակարգի մակարդակը Thread Architecture and Memory Model Thread Architecture եւ Memory Model- ը Ամեն բաղադրիչը պահպանում է իր սեփական անձնական կատարման բաղադրիչը, իսկ միասին համատեղում է որոշ բաղադրիչներ այլ բաղադրիչների հետ: Պաշտոնական Thread Resources Հիմնականում, յուրաքանչյուր սեղան ունի իր սեփական: Thread Control Block (TCB), որը ներառում է thread ID- ը, ծրագրային մանրամասը, գրասենյակային սերտիֆիկը եւ ծրագրային տեղեկատվություն Խնդրում ենք տեղական տարբերակների եւ Funktion Call Management- ի համար: Ծրագրային Counter-ի հետազոտություն, որը կատարվում է current instructions Thread Control Block (TCB) սարքավորումներ Հիմնական Memory Ծրագրային Counter Հաղորդագրված ռեսուրսներ Բոլոր բաղադրիչները մի գործընթացում համատեղում են: containing the program instructions Code section with global and static variables Data section for dynamically allocated data Heap memory and other system resources File descriptors Code մասը Data մասը Հիմնական Memory File Descriptors- ը Այս համատեղելի մանրամասի մոդելը միասին հզորություն է եւ խոշորություն է: Երբ այն թույլ է տալիս արդյունավետ կապը, այն նաեւ ներկայացնում է անհրաժեշտությունը ճշգրիտ synchronization- ի համար, որպեսզի փնտրել տվյալների ռեժիմները եւ ապահովել մանրամասի անվտանգությունը: Այս համատեղելի մանրամասի մոդելը միասին հզորություն է եւ խոշորություն է: Երբ այն թույլ է տալիս արդյունավետ կապը, այն նաեւ ներկայացնում է անհրաժեշտությունը ճշգրիտ synchronization- ի համար, որպեսզի փնտրել տվյալների ռեժիմները եւ ապահովել մանրամասի անվտանգությունը: The Fork/Join Model: Structured Parallelism The Fork/Join մոդել: Structured Parallelism The fork/join model represents the most common pattern for structured parallel programming. Այս մոդելը ապահովում է ճշգրիտ abstraction- ում աշխատանքի բաժանման համար բազմաթիվ մետաղերի միջեւ եւ արտադրման արդյունքների համար: A execution flow of a Fork/Join model looks like this: Սահմանափակ Start- ը: Հիմնական սահմանափակը սկսում է սահմանափակ կատարել Fork Phase: Երբ պահանջվում է parallel աշխատանքը, հիմնական սխալը ստեղծում է նոր սխալներ (forks), ամենը սկսվում է որոշված գործառույթում: Parallel Execution: Երկու հիմնական եւ բաղադրված մանրամասները կատարվում են միասին, հնարավորապես տարբեր սարքի մանրամասներում The main thread waits for all spawned threads to complete before continuing Հիմնական մետաղը սպասում է բոլոր մետաղի մետաղների ավարտելու համար Արդյունաբերական գործառույթը (Sequential Continuation) - Արդյունաբերական գործառույթը կատարվում է parallel work- ի արդյունքների հետ Հիմնական Start Fork դասընթացը Հիմնական ճշգրիտությունը: Միացեք այս փուլը: Հաջորդ փաթեթը: What’s Next? Ի՞նչ է հաջորդը Մենք այժմ հասկանում ենք այս multithreading Series- ի երեք մասի վերջը: Այժմ, մենք ներառում ենք բաղադրիչների եւ գործընթացների հիմնական բաղադրիչները, որը ձեզ մատակարարում է խոշոր բաղադրիչներ, որոնք պետք է կառուցել: Հաջորդ մասում, մենք կցանկանաք փոխել բաղադրիչները դիզայնից գործառույթում եւ ուսումնասիրել դիզայնի աշխարհը գործառույթում: Գնացրեք եւ , որտեղ մենք գրել ենք իրական կոդը, վերլուծել է արտադրանքը, եւ հասկանալ, թե ինչպես են այդ գրասենյակները ապրում. POSIX threads (pthreads) C++ std::thread Suggested Reads Խնդրում ենք կարդալ «1» Multithreaded Computer Architecture: A Summary of the State of the ART- ը Երկու Distributed Computing: Principles, Algorithms, and Systems — Kshemkalyani եւ Singhal (uic.edu)