Mchakato dhidi ya Threads, Hardware Threads vs Software Threads, Hyperthreading Katika dunia ya leo ya mafanikio ya juu na programu ya kukabiliana, Je, wewe ni kujenga injini ya biashara ya wakati halisi, injini ya mchezo, au seva rahisi ya wavuti, kuelewa jinsi ya kutekeleza kazi pamoja inaweza kuboresha kwa kiasi kikubwa utendaji na uzoefu wa mtumiaji. kuingia katika mchezo. concurrency threading Katika blogu zetu za zamani, tulijifunza mbalimbali ya - viungo muhimu vya multithreading na parallelism ya juu. Sasa tumeweka msingi, ni wakati wa kuhamia nje ya nadharia na kuingia katika swali la msingi: Ikiwa haujawahi kusoma hadithi hizo za awali, napenda kuangalia kwanza kwa mazingira bora. Taxonomy ya Flynn Mifano ya Programu ya Pamoja Nini hasa ni thread, na inafanya nini? Taxonomy ya Flynn Taxonomy ya Flynn Mifano ya Programu ya Pamoja Mifano ya Programu ya Pamoja Nini hasa ni thread, na inafanya nini? kupakua faili wakati wa kuboresha UI, kuhesabu matokeo wakati wa kujibu maombi ya mtumiaji, au usindikaji wa maombi ya mtandao yanayotoka kwa pamoja. Nyuma ya matukio, CPU za kisasa zinaunga mkono maombi mengi , na lugha za programu kama C++ hutoa zana yenye nguvu za kutumia. Threading inaruhusu programu kufanya zaidi ya kitu kimoja kwa wakati mmoja: hardware threads Threading inaruhusu programu kufanya zaidi ya kitu kimoja kwa wakati mmoja: Ikiwa wewe ni mpya kwa multithreading au unataka kuimarisha misingi yako, hadithi hii itakupa mwanzo imara. Maonyesho ya juu: Threads vs. taratibu, Hardware threads vs. Software Threads, Hyperthreading, Fork/join threading model What Is a Thread? Nini maana ya Thread? Moja ya vikwazo vya kwanza kwa ajili ya kuanza kujifunza kuhusu concurrency ni kuelewa . difference between a thread and a process ya ni programu ya kujitegemea ambayo inafanya kazi. Ina nafasi yake mwenyewe ya kumbukumbu, maelezo ya faili, na rasilimali za mfumo, zilizojitenga na taratibu zingine. Kwa mfano, wakati unapofungua kivinjari au kifungo, unatumia mchakato mpya. Mfumo wa uendeshaji huendesha taratibu na hauna kushiriki nafasi ya kumbukumbu isipokuwa umewekwa wazi kufanya hivyo. process ya , kwa upande mwingine, ni kipengele kidogo zaidi cha utekelezaji ndani ya mchakato. viungo vingi vinaweza kuwepo ndani ya mchakato mmoja, kuendesha kwa wakati mmoja na kushiriki nafasi hiyo ya kumbukumbu. mazingira haya ya kushiriki yanawezesha mawasiliano ya haraka kati ya viungo, lakini pia hufungua mlango kwa na ya Ikiwa huna usimamizi sahihi. thread race conditions synchronization issues Kwa mantiki, unaweza kufikiri juu ya thread kama a — mtiririko wa kujitegemea wa utekelezaji na mwenyewe ya na ya Hata hivyo, kushiriki na vifaa vingine katika mchakato huo. lightweight process program counter registers stack heap and global memory Wakati wa kujadili maneno, ni muhimu kutambua tofauti kati ya na ya Ingawa wote wawili wanahusiana na "unit ya utekelezaji", wanafanya kazi kwenye ngazi tofauti sana katika kundi la kompyuta. hardware threads software threads What is a Hardware Thread? Nini maana ya Hardware Thread? ya Ni mzunguko wa utekelezaji Kwa kweli, ni a ndani ya kernel ambayo inaweza kupata, decode, na kutekeleza mtiririko wa maagizo kwa kujitegemea. hardware thread directly supported by the processor dedicated control unit Kwa kawaida, - Kwa maneno mengine, moja ya udhibiti kwa CPU ya kimwili. Katika mifumo na viungo vingi (kwa mfano, server motherboards), kuna Hata hivyo, mfumo huu umebadilika haraka na kuanzishwa kwa na ya ya usanifu. one processor equaled one hardware thread one hardware thread per socket multi-core multi-threaded Katika CPU ya kisasa: Kila kernel ina angalau thread moja ya vifaa. Kwa Simultaneous Multithreading (SMT) - toleo la Intel linaloitwa Hyper-Threading - kiini kimoja kinaweza kuunga mkono viungo vingi vya vifaa. Sasa, mchakato mmoja (socket) inaweza kuwa na kaboni nyingi, na kila kaboni inaweza kuwa na viungo vingi vya vifaa. Kwa kuongezea na udhaifu, wengi So, when you check your CPU information using system tools, the number of “processors” shown might refer to logical threads, not physical cores or sockets. operating systems report hardware threads or logical cores as “processors.” Jinsi ya kuangalia idadi ya viungo vya vifaa ambavyo nina? Windows ya Windows ya Kuna njia kadhaa za kuangalia idadi ya viungo vya vifaa kwenye Windows, lakini usijali, hii sio mojawapo ya machapisho hayo ya blogu ya "10 ya kufanya hivyo". Kutumia kichwa kwa ajili ya Tabu na kuchagua . Task Manager Ctrl + Shift + Esc Performance CPU Utaona muhtasari ambao unajumuisha idadi ya na ya (I.e., viungo vya vifaa). Inaonekana kama kitu kama hiki: cores logical processors Chaguo zingine, ikiwa ungependa kuchunguza mwenyewe: PowerShell: Alternative 1: Mabadiliko ya 1: (Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors Command Prompt (requires wmic): Alternative 2: Mabadiliko ya 2: wmic cpu get NumberOfLogicalProcessors,NumberOfCores 2 ya Linux 2 ya Linux Ikiwa unatumia ladha yoyote ya Linux, muundo wa mfumo wako na idadi ya viungo vya vifaa vinaweza kuthibitishwa kwa kusoma Picha hii ilipigwa tokea ktk veranda za moja ya vyumba vya Manyara Serena Lodge. /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: ... Baadhi ya mambo ya kuzingatia kutoka kwa hili: CPU Core: Hii inaweza kuwa ya uongo kwa miundombinu ya hybrid, kama idadi hii inaweza kutafakari idadi halisi ya msingi (kwa mfano, Intel yangu i5-13th Gen ina 10 core: 6 P-core + 4 E-core, lakini inaonyesha 8 core). Ndugu: Inahusu idadi ya jumla ya viungo vya mantiki. Uwepo wa bendera ya ht (kwa kifupi kwa Hyper-Threading) inathibitisha kwamba SMT inasaidia. Kuna mbadala chache kwa amri hii, ambayo pia hutoa matokeo mazuri: Hatua ya 1: Lscpu Hatua ya 1: Lscpu Ninaweza kupata matokeo yafuatayo kwa : 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 Chaguo la pili ni hwloc (lstopo) Chaguo la pili ni hwloc (lstopo) Chombo kingine muhimu cha uchunguzi wa topolojia ya CPU ya mfumo wako ni utility maarufu ya Linux , ambayo hutoa maonyesho ya mstari wa amri na graphics ya mipangilio yako ya vifaa. Ni rahisi sana kwa visualizing kernels, viungo vya vifaa, ngazi za cache, na nodes ya NUMA. hwloc Ikiwa hwloc tayari imewekwa, unaweza kuzalisha ramani ya picha ya usanifu wa mfumo wako kwa kutumia Maagizo ya: lstopo Nini maana ya Hyper-Threading? Hyper-Threading (HT) ni utekelezaji wa Intel wa Multithreading Simultaneous (SMT), ambayo inaruhusu kila kiini cha kimwili kuendesha mtiririko wa maagizo mawili kwa wakati mmoja. Utumiaji bora wa CPU Ufanisi bora katika kazi za I/O-bound au multitasking Lakini: Haifai kuongezeka kwa utendaji - faida ya kawaida ni karibu 15-30%. Maelezo ya Programu ya Parallel: Wakati HT inasaidia multitasking ya kila siku (kwa mfano, kuendesha mipango kadhaa kwenye kompyuta ya kompyuta), inaweza kuathiri ufanisi katika kazi ya HPC au kazi za parallel. Kuendesha viungo vingi vikubwa kwenye msingi mmoja unaweza kusababisha upungufu wa rasilimali na kupunguza kasi. Hiyo ni kwa nini vituo vingi vya HPC vinafungua HT kwa default - kupanga kwa makini kwa viungo ni muhimu kwenye mifumo ya SMT. Mfano wa i5–13450HX: 6 P-Cores na HT → viungo vya 12 4 E-core bila HT → 4 thread ➡️ Jumla = 16 viungo vya mantiki What is Hyper-Threading? Hyper-Threading (HT) ni utekelezaji wa Intel wa Multithreading Simultaneous (SMT), ambayo inaruhusu kila kiini cha kimwili kuendesha mtiririko wa maagizo mawili kwa wakati mmoja. Utumiaji bora wa CPU Ufanisi bora katika kazi za I/O-bound au multitasking Lakini: Haifai kuongezeka kwa utendaji - faida ya kawaida ni karibu 15-30%. Caution for parallel programming: Wakati HT inasaidia multitasking ya kila siku (kwa mfano, kuendesha programu nyingi kwenye kompyuta), inaweza Kuendesha viungo vingi vikubwa kwenye msingi mmoja unaweza kusababisha na kupunguza kasi. Hiyo ni kwa nini - Utaratibu mzuri wa thread ni muhimu kwenye mifumo ya SMT. negatively affect performance in HPC or parallel workloads resource contention many HPC centers disable HT by default Example — i5–13450HX: 6 P-Cores na HT → viungo vya 12 4 E-core bila HT → 4 thread ➡️ Total = 16 logical threads Understanding Software Threads: The Foundation Kuelewa viungo vya programu: Msingi Tofauti na fomu za vifaa, ambazo zinapatikana kwenye kiwango cha processor, fomu za programu ni Hiyo inawakilisha mtiririko wa utekelezaji wa kujitegemea ndani ya mchakato. . programming abstractions A software thread is essentially a lightweight execution unit that exists within a process, sharing the same address space while maintaining its own execution context Neno la programu ni kimsingi kipengele kidogo cha utekelezaji ambacho kinapatikana ndani ya mchakato, kilichoshiriki nafasi hiyo ya anwani wakati wa kudumisha mazingira yake mwenyewe ya utekelezaji. Unapounda kiungo cha programu katika msimbo wako, mfumo wa uendeshaji na mazingira ya uendeshaji hufanya kazi pamoja ili kuhariri kwenye inapatikana Mipangilio hii ni ya kimwili na inategemea msimamizi wa thread, ambaye huamua wakati na mahali ambapo kila thread inafanya kazi. Vifaa vya Hardware Vifaa vya Hardware Tofauti kati ya viungo vya programu na viungo vya vifaa ni muhimu. viungo vya vifaa vinawakilisha viungo vya uendeshaji vya kimwili vinavyopatikana kwenye processor yako, wakati viungo vya programu ni uchambuzi ambao programuzi wanafanya kazi na. viungo kimoja vya vifaa vinaweza kuendesha viungo vingi vya programu kwa muda kupitia mabadiliko ya mazingira, na mifumo ya kisasa mara nyingi inasaidia maelfu ya viungo vya programu vinavyofanya kazi kwa wakati mmoja. Tofauti kati ya viungo vya programu na viungo vya vifaa ni muhimu. viungo vya vifaa vinawakilisha viungo vya uendeshaji vya kimwili vinavyopatikana kwenye processor yako, wakati viungo vya programu ni uchambuzi ambao programuzi wanafanya kazi na. A single hardware thread can execute multiple software threads over time through context switching, and modern systems often support thousands of software threads running concurrently. The Evolution From Processes to Threads Mabadiliko kutoka kwa mchakato hadi viungo Ili kuelewa kwa nini mwongozo ulianzishwa, tunapaswa kwanza kuchunguza mfano wa mchakato wa jadi. mifumo ya uendeshaji ilitumika kwa kihistoria mchakato kama kipengele cha msingi cha utekelezaji, ambapo kila mchakato alikuwa: Mchakato wa uendeshaji unaofuata unaofuata Isolation kamili na nafasi za anwani tofauti, maelezo ya faili, na ID ya mtumiaji Ujumbe tu kupitia mifumo ya mawasiliano ya mchakato (IPC) Rasilimali ngumu kwa sababu ya duplication kamili ya mchakato Threading ilianzishwa ili kukabiliana na vikwazo vya mfano huu wa mchakato kwa kuruhusu mchanganyiko wa matunda. Threads hutoa faida kadhaa muhimu: 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 Usambazaji wa data rahisi 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 Ufanisi wa rasilimali 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 Ujumbe wa kuongezeka 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 Mipango ya kiwango cha mfumo wa uendeshaji Thread Architecture and Memory Model Mfumo wa Thread na Mfumo wa kumbukumbu Kila thread inahifadhi mazingira yake mwenyewe ya utekelezaji binafsi wakati kushiriki rasilimali fulani na thread nyingine katika mchakato huo. Rasilimali za Thread binafsi Kila thread ina yake mwenyewe: Thread Control Block (TCB) ambayo ina ID ya thread, mtazamo wa programu, mkusanyiko wa usajili, na habari za mipangilio Kumbukumbu ya stack kwa variables za mitaa na usimamizi wa wito wa kazi Programu Counter kufuatilia maagizo ya sasa yaliyotumika Mstari wa Usimamizi wa Thread (TCB) Kumbukumbu ya Stack Mpango wa Counter rasilimali za kushirikiana Vifaa vyote katika mchakato wa kushiriki: 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 Sehemu ya Kodi Sehemu ya Data kumbukumbu ya heap Faili ya Descriptor Mfano huu wa kumbukumbu iliyoshirikiana ni nguvu na changamoto. Ingawa inawezesha mawasiliano ya ufanisi, pia inawezesha haja ya usindikaji wa makini ili kuzuia mashindano ya data na kuhakikisha usalama wa thread. Mfano huu wa kumbukumbu iliyoshirikiana ni nguvu na changamoto. Ingawa inawezesha mawasiliano ya ufanisi, pia inawezesha haja ya usindikaji wa makini ili kuzuia mashindano ya data na kuhakikisha usalama wa thread. The Fork/Join Model: Structured Parallelism Mfano wa Fork / Join: Parallelism iliyoundwa Mfano wa fork/join ni mfano wa kawaida kwa programu ya parallel iliyoundwa. Mfano huu hutoa uchambuzi safi kwa kushiriki kazi kati ya viungo vingi na kukusanya matokeo. Mchakato wa utekelezaji wa mfano wa Fork/Join inaonekana kama ifuatavyo: Kuanza kwa mfululizo: Mstari mkuu huanza kutekeleza kwa mfululizo Hatua ya Fork: Wakati kazi ya parallel inahitajika, thread kuu huunda (forks) thread mpya, kila moja kuanzia kwa kazi iliyotolewa Utekelezaji wa Pamoja: Vifaa viwili vya msingi na vya kuzaliwa vinafanya kazi kwa wakati mmoja, uwezekano juu ya vifaa tofauti vya vifaa Mchakato wa kujiunga: Mchakato wa msingi unatarajia viungo vyote vilivyotengenezwa kukamilika kabla ya kuendelea Utekelezaji wa mfululizo: Utekelezaji unaendelea kwa mfululizo na matokeo ya kazi ya parallel Mwanzo wa mfululizo Hatua ya Fork Utekelezaji wa Pamoja: Kujiunga katika hatua: Utaratibu wa kuendelea: What’s Next? Nini ni ya baadaye? Sasa tumefikia mwisho wa sehemu ya tatu katika mfululizo huu wa multithreading. Hadi sasa, tumefunika dhana za msingi za viungo na mchakato, kukupa msingi imara wa kujenga. Katika sehemu inayofuata, tutabadilika kutoka nadharia hadi mazoezi na kuchunguza ulimwengu wa kuunganisha katika vitendo. na ya ambapo tutaandika msimbo halisi, uchambuzi wa outputs, na kuelewa jinsi maktaba hizi zinatoa usawa wa maisha. POSIX threads (pthreads) C++ std::thread Suggested Reads Maoni ya kusoma [1] Kwa ajili ya Multithreaded kompyuta usanifu: Muhtasari wa hali ya ART 2 ya Kompyuta iliyotengwa: kanuni, algorithms, na mifumo - Kshemkalyani na Singhal (uic.edu)