Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌΠΈ

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ позволяСт ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ рСагирования прилоТСния ΠΈ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² многопроцСссорной ΠΈΠ»ΠΈ многоядСрной систСмС, Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΈ

ΠŸΡ€ΠΎΡ†Π΅ΡΡ β€” это исполнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ процСссы для раздСлСния исполняСмых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡ‚ΠΎΠΊ β€” это основная Π΅Π΄ΠΈΠ½ΠΈΡ†Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ опСрационная систСма выдСляСт врСмя процСссора. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ планирования ΠΈ Π½Π°Π±ΠΎΡ€ структур, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСма сохраняСт контСкст ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° приостановлСно. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° содСрТит всС свСдСния, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎΠΌ числС Π½Π°Π±ΠΎΡ€ рСгистров процСссора ΠΈ стСк ΠΏΠΎΡ‚ΠΎΠΊΠ°. НСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² контСкстС процСсса. ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ процСсса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ части, выполняСмыС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

Π¦Π΅Π»ΠΈ примСнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ рСагирования прилоТСния ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами многопроцСссорной ΠΈΠ»ΠΈ многоядСрной систСмы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ прилоТСния.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС классичСскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ для выполнСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ основной ΠΏΠΎΡ‚ΠΎΠΊ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π±ΡƒΠ΄Π΅Ρ‚ нСдоступСн. Для Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° входящиС сообщСния ΠΈΠ»ΠΈ события Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ связи с ΡΠ΅Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ устройством.

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния ΠΏΡƒΡ‚Π΅ΠΌ выполнСния этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΈ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² многопроцСссорной ΠΈΠ»ΠΈ многоядСрной систСмС. Π’ Ρ‚Π°ΠΊΠΎΠΉ систСмС использованиС многопоточности ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ рСагирования.

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс System.Threading.Thread, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт управляСмый ΠΏΠΎΡ‚ΠΎΠΊ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ИспользованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ слСдуСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. НСобработанныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, приводят ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ процСсса. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² управляСмых ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ….

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ многопоточности

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ боятся ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты. ВСроятно, это связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ссли написаны Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ большС ошибок, Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅, ΠΈ ΡƒΡ‰Π΅Ρ€Π±, нанСсСнный нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ. НСкоторым тяТСло даСтся ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ многопоточности, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ стараСтся Π΅Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ. Π›ΠΈΡ‡Π½ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄Π½Π° ΠΈΠ· самых интСрСсных особСнностСй Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с основных понятий: ядСр Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора, ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… процСссов ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ прСимущСства ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования.

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ процСсс Π² сравнСнии с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ

ΠŸΡ€ΠΎΡ‰Π΅ говоря, процСсс β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² Ρ…ΠΎΠ΄Π΅ своСго выполнСния. Когда ΠΌΡ‹ выполняСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, запускаСтся процСсс. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ процСсс состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΠΎΡ‚ΠΎΠΊ β€” это Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ сСгмСнт процСсса. ΠŸΠΎΡ‚ΠΎΠΊΠΈ β€” исполняСмыС сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, стоящиС ΠΏΠ΅Ρ€Π΅Π΄ исполняСмым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Роль ядСр процСссора

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² процСссС β€” это Π·Π°Π΄Π°Ρ‡Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ процСссор. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ процСссоров сСгодня ΡƒΠΌΠ΅ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ядрС, создавая Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ядро. Π­Ρ‚ΠΎ называСтся одноврСмСнная ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Hyper-Threading, Ссли Ρ€Π΅Ρ‡ΡŒ ΠΎ процСссорС ΠΎΡ‚ Intel. Π­Ρ‚ΠΈ процСссоры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ многоядСрными процСссорами. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π²ΡƒΡ…ΡŠΡΠ΄Π΅Ρ€Π½Ρ‹ΠΉ процСссор ΠΈΠΌΠ΅Π΅Ρ‚ 4 ядра: Π΄Π²Π° физичСских ΠΈ Π΄Π²Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ…. КаТдоС ядро ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ?

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, ΠΎΠ΄ΠΈΠ½ процСсс содСрТит нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈ ΠΎΠ΄Π½ΠΎ ядро процСссора ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если ΠΌΡ‹ пишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая запускаСт ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ядра процСссора, ΠΌΡ‹ Π½Π΅ раскрываСм вСсь ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» многоядСрности. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ядра просто стоят Π±Π΅Π· Π΄Π΅Π»Π°, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. Если ΠΌΡ‹ напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° создаст нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для ΠΎΡ‚Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ нСзависимых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚ΠΎ ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ядра процСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ‹Π»ΠΈΠ»ΠΈΡΡŒ Π±Ρ‹ Π±Π΅Π· Π΄Π΅Π»Π°. МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π΅ΠΌ самым сократив ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния процСсса.

ВрСмя Π·Π°ΠΏΠ°Ρ‡ΠΊΠ°Ρ‚ΡŒ Ρ€ΡƒΠΊΠΈ

ΠœΡ‹ напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π³Π΄Π΅ запустим Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π΄Π²Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ). Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ, Π° Π·Π°Ρ‚Π΅ΠΌ создадим ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…. ΠŸΡ€ΠΈ этом ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ врСмя выполнСния для ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ волшСбноС:

Summation1 ΠΈ Summation2 β€” это Π΄Π²Π° класса-Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. На ΠΈΡ… мСстС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любая бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π°ΠΌ захочСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π― Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» случайныС Ρ†ΠΈΠΊΠ»Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ врСмя выполнСния β€” это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

Π’ΠΎΡ‚, Π²ΠΈΠ΄ΠΈΡ‚Π΅? ВрСмя выполнСния сокращаСтся Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈ ΠΏΡ€ΠΈ использовании ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΎΠ²Π° сила многопоточности.

Π­Ρ‚ΠΎ Π±Ρ‹Π» всСго лишь простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, наглядно ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. БущСствуСт бСсконСчноС мноТСство Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΅Π΅ примСнСния, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ своСго прилоТСния. НС Π±ΠΎΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ сцСнарии, Π³Π΄Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ максимально ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы своСй систСмы.

На ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ основ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ способ это β€œΡ‡Ρ‚ΠΎ-то” ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ. НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСдставлСниС ΠΎ нСобходимости ΠΈ полСзности ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования.
БущСствуСт Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…: ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ синхронности ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Ρ‚. Π΄. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π½ΠΈΠΌΠΈ. Как говорится, тяТСло Π² ΡƒΡ‡Π΅Π½ΠΈΠΈ β€” Π»Π΅Π³ΠΊΠΎ Π² бою!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, структура ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π˜Π½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ многоядСрныС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹, Π° программисты ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΊ Π½ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” тСсно связанныС понятия:

ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” это свойство ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Ρ‹ ( ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈΠ»ΠΈ прилоТСния), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ процСсс ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²;

ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это ΠΏΡ€ΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ свойства, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°ΡΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π°Π΄ Β«iΒ»:

ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ β€” это свойство устройства, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ядСр Π² процСссорС;

ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” это свойство ядра, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполнят ь ΠΎ Π΄Π½Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²;

ΠΎΠ΄Π½ΠΎ ядро Π² процСссорС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ нСсколько β€” это зависит ΠΎΡ‚ свой ства ядра;

процСсс Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС β€” это Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹;

процСссы Π½Π΅ взаимосвязаны, поэтому ΠΌΠΎΠ³ΡƒΡ‚ выполнят ь ся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΏΡ€ΠΈ этом процСсс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²;

ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” это Β«Π²Π΅Ρ‚Π²ΡŒΒ», Β«Π½ΠΈΡ‚ΡŒΒ», Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ ая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ частями;

ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ взаимосвязаны ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΏΡ€ΠΈ этом ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ взаимосвязаны;

Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½Π° выполняСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ;

любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” это ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ для процСссора, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈ Ρ…, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠœΡ‹ выяснили, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” это ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Как это выглядит Π½Π° Π΄Π΅Π»Π΅? Когда ΠΌΡ‹ запускаСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму, Ρ‚ΠΎ Π² автоматичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π°Ρ…ΠΎΠ΄ ΠΈ тся нСсколько систСмных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ рСализуСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ссли Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ нСсколько ядСр ΠΈ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΏΠΎ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. Π’ этом случа Π΅ О Π‘ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ядСр.

На Π΄Π΅Π»Π΅ это выглядит Ρ‚Π°ΠΊ : Ρƒ вас Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ОБ ΠΈ нСсколько систСмных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‹ запустили Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ β€” всС это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ нСсколько Π²ΠΊΠ»Π°Π΄ΠΎΠΊ: Π² ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ ΠΌΡƒΠ·Ρ‹ΠΊΡƒ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠΎΡ‡Ρ‚Ρƒ, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΈΡ‰ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ Ρ‚. Π΄. Если Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅ Β«ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β», Ρ‚ΠΎΠ³Π΄Π° каТдая ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ открытая Π²ΠΊΠ»Π°Π΄ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса. Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ β€” это процСсс, Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ° β€” это ΠΏΠΎΡ‚ΠΎΠΊ этого процСсса. По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, какая Π²ΠΊΠ»Π°Π΄ΠΊΠ° Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ, Ρ‚ΠΎΠΉ опСрационная систСма ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ядра.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ устройств становится Π½ΠΎΡ€ΠΌΠΎΠΉ ΠΏΡ€ΠΈ производствС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ². ИспользованиС ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° многоядСрных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… β€” это Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ Π½Π΅ использованиС Π΅Π³ΠΎ мощности. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ Π²Π΅Ρ€Ρ… Π½Π°Π΄ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½Ρ‹

Ссли ΠΏΠΎΠ΄ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ²ΡˆΠ΅ΠΌΡΡ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ Π’Ρ‹ Π½Π°ΠΆΠΌΡ‘Ρ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтСй ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

НСмного ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π§Π°ΡΡ‚ΡŒ 1. Бинхронизация Π·Π»ΠΎ ΠΈΠ»ΠΈ всС-Ρ‚Π°ΠΊΠΈ Π½Π΅Ρ‚

МнС ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ часто приходится ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с высоконагруТСнными ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ многопроцСссными сСрвисами (application-, web-, index-server).
Достаточно интСрСсная, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° нСблагодарная Ρ€Π°Π±ΠΎΡ‚Π° β€” ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС это хозяйство.
РастущиС потрСбности ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² часто ΡƒΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π΅Π·Π½ΡƒΡŽ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ систСмы Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‚.ΠΊ. ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ чтСния-записи ТСстких дисков ΠΈ сСти растут ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ запросов ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².
Π Π΅Π΄ΠΊΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства Π½ΠΎΠ΄ΠΎΠ² кластСра (систСма ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ распрСдСлСнная).
Π§Π°Ρ‰Π΅ приходится запустив ΠΏΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€, ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста, Π»Π΅Π·Ρ‚ΡŒ Π² source code ΠΈ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ляпы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ оставили ΠΊΠΎΠ»Π»Π΅Π³ΠΈ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ сам, Ρ‡Π΅Π³ΠΎ Π³Ρ€Π΅Ρ…Π° Ρ‚Π°ΠΈΡ‚ΡŒ, ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄.
НСкоторыС ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связаных с синхронизациСй, я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΈΠ·Π»ΠΎΠΆΠΈΡ‚ΡŒ здСсь. Π­Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ курс ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ β€” прСдпологаСтся, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π·Π½Π°ΠΊΠΎΠΌ с понятиСм thread ΠΈ context switch, ΠΈ Π·Π½Π°Π΅Ρ‚ для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ½Ρ‹ mutex, semaphore ΠΈ Ρ‚.Π΄.

Π›ΡŽΠ±ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ большСС Ρ‡Π΅ΠΌ Β«Hello worldΒ», ясно, Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ асинхронный ΠΊΠΎΠ΄ нСвСроятно слоТно β€” Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ±Ρ‰ΠΈΠΉ channel, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ структуру Π² памяти (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ hash-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹), Π·Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Ρ‚.Π΄.
Бинхронизируя Ρ‚Π°ΠΊΠΎΠΉ доступ, ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π²Π°Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ исполнСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… участков ΠΊΠΎΠ΄Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ это ΠΎΠ΄ΠΈΠ½, Ρ€Π΅Π΄ΠΊΠΎ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1 writer/ N readers).
ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ синхронизации нСоспорима. ЧрСзмСрная ΠΆΠ΅ синхронизация ΠΎΡ‡Π΅Π½ΡŒ Π²Ρ€Π΅Π΄Π½Π° β€” кусок ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡˆΡƒΡΡ‚Ρ€ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡˆΠΈΠΉ Π½Π° 2-Ρ… ΠΈΠ»ΠΈ 3-Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…, ΡƒΠΆΠ΅ для 5-Ρ‚ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Β«singlethreadedΒ», Π° Π½Π° 20-Ρ‚ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅ практичСски лоТится ΡΠΏΠ°Ρ‚ΡŒ.

Однако ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ нСдостаточная синхронизация исполнСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ β€” систСма Π·Π°Π»ΠΈΠΏΠ°Π΅Ρ‚. Π­Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° исполняСмый ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ΄ содСрТит Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ обращСния ΠΊ HDD (Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ seek), ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ мноТСствСнном ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ большим кускам памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ постоянный сброс кэша ΠΏΡ€ΠΈ context switch β€” CPU cache просто Ρ‚ΡƒΠΏΠΎ отваливаСтся).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сСмафоры (semaphore)

Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ использования сСмафоров довольно прост ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ понимания процСсса, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство нСдостатков, Π² Ρ‚ΠΎΠΌ числС Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ максимальноС количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ скорСС всСго ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² бою (Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½, Π½Π° систСмС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°) β€” Ρ‡Ρ‚ΠΎ Π½Π΅ всСгда Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π—Π°Ρ‚ΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ прСимущСством Ρ‚Π°ΠΊΠΎΠ³ΠΎ способа ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² всСго сСрвиса, Π±Π΅Π· измСнСния execution plan, Ρ‚.Π΅. практичСски Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΊΠΈ всСго Π΄Π²ΠΈΠΆΠΊΠ° β€” просто проставив нСсколько сСмафоров Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡƒΠ·ΠΊΠΈΡ… мСстах. Π― Π½Π΅ сторонник Π½Π΅ΠΎΠ±Π΄ΡƒΠΌΠ°Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСмафоры, Π½ΠΎ Π² качСствС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (для успокоСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°), я Π½Π΅ Ρ€Π°Π· использовал этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎ Π±Ρ‹ впослСдствии спокойно ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΒ», Π²Π½ΠΈΠΊΠ½ΡƒΠ² Π² исходный ΠΊΠΎΠ΄.

РасставляйтС ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ (priority)

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ довольно просто Β«ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. НапримСр, Ссли Π² систСмС Π»ΠΎΠ³ΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ² Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π΄ΠΎ минимального, ΠΌΠΎΠΆΠ½ΠΎ сильно Β«ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒΒ» процСсс, Π½Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ log-level.
НапримСр ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ссли ΠΏΡƒΠ» со мноТСством ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Π½ΠΎΠΉ приоритСтности:

ΠŸΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° дСйствуСт для всСго процСсса, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡƒΠ»Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сущСствуСт этот ΠΏΠΎΡ‚ΠΎΠΊ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ с ΠΎΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ.

Divide et impera (РаздСляй ΠΈ властвуй)

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ часто Π½Π΅ трСбуСтся ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ исполнСниС ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ участка ΠΊΠΎΠ΄Π° β€” Ρ‚.Π΅. Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСйствиС ΠΈΠ»ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ. НапримСр ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈ, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ посСщСния, ΠΏΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ кэш, ΠΈ Ρ‚.Π΄.
БущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΌΠΎΠΆΠ½ΠΎ, выдСляя куски синхронного ΠΊΠΎΠ΄Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… ΠΏΠΎΠ·ΠΆΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΠΎΠ½ΠΎΠ²ΠΎ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚.Π½. background service). Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСсс aka RPC (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ асинхронный Π²Ρ‹Π·ΠΎΠ² WebService). ЕстСствСнно врСмСнная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° (помСщСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ Ρ‚.Π΄.) этой Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ мСньшС стоимости самого исполнСния.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ LOG-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ:

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ, FIFO, LIFO ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ

ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΡƒΠ»Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π΄Π΅Π»ΠΎ Π½Π΅ Ρ…ΠΈΡ‚Ρ€ΠΎΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ многопоточности ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ€Π°Π²Π½Ρ‹Ρ… условиях ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ LIFO стоит ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ Π½ΠΎΠΌΠ΅Ρ€ ΠΎΠ΄ΠΈΠ½ (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Ссли ΠΏΡ€ΠΈ этом ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий Π½Π΅ Π²Π°ΠΆΠ½Π°). Иногда ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ LIFO ΠΈ FIFO (элСмСнты LIFO ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ малСнькими очСрСдями FIFO ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ с ΠΊΠΎΠ½Ρ†Π° ΠΈ Ρ‚.Π΄.). Бмысл Ρ‚Π°ΠΊΠΈΡ… ΠΈΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ кроСтся Π² кСшС процСссора ΠΈ отчасти Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти. Π’.Π΅. Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послСдниС элСмСнты ΠΈΠ· LIFO Π΅Ρ‰Π΅ находятся Π² кСшС процСссора нСсравнСнно Π²Ρ‹ΡˆΠ΅ вСроятности Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρƒ FIFO Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄Π»ΠΈΠ½Π½Ρ‹.

ReadWriteMutex

ΠžΡ‡Π΅Π½ΡŒ часто ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС измСнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр ΠΏΡ€ΠΈ записи Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ„Π°ΠΉΠ», ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ структуры списков ΠΈΠ»ΠΈ hash Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Ρ‚.Π΄. ΠŸΡ€ΠΈ этом, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΏΡ€ΠΈ этом часто Π΄Π°ΠΆΠ΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ (Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ dirty read ΠΈ Π²Ρ‹Π»Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ записи Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° измСнСния Π½Π΅ совсСм Π²Π°Π»ΠΈΠ΄Π½Ρ‹).
Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ RW-mutex, Π³Π΄Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ записи происходит полная синхронизация ΠΊΠΎΠ΄Π° (исполняСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ).
ΠŸΡ€ΠΈ использовании read/write-mutex, Π½ΡƒΠΆΠ½ΠΎ всСгда Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ происходит Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ измСнятся (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ построСнии Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ cache ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ€Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ послС записи). Π’ этом случаС ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ API прСдоставляСт callback для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π»ΠΈΠ±ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² случаС многопоточности, Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ использованиС RW-mutex, со всСми ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅ΠΉΡˆΠ΅ описано Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ API. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях RW-mutex Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Ρ‚ΡŒ (ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ mutex) количСство reader-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΠ½ΠΎΠ³Π΄Π° writer-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π­Ρ‚ΠΎ связано с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ записи (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ сСмафоры). НСсмотря Π½Π° эти ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ограничСния, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… reader-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ возмоТности ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Ρ‚Π°ΠΊΠΎΠΌ mutex.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ source code

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° нСзнания, ΠΈΠ½ΠΎΠ³Π΄Π° нСпонимания Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ скрываСтся Π·Π° Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ классом ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, особСнно ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ проявляСтся ΠΏΡ€ΠΈ использовании ΠΈΡ… Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ОсобСнно это касаСтся ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Ρ€Π°Π·ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я имСю Π² Π²ΠΈΠ΄Ρƒ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ использования RW-mutex.
Один ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π° ΠΊΠ°ΠΊ-Ρ‚ΠΎ использовал fair RW-mutex, построСный Π½Π° сСмафорах. Он полСнился динамичСски ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ количСство reader-ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² класс RWMutex (Π·Π°Π΄Π°Π» статичСски «максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅Β» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 500) ΠΈ написал ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ для writer-ΠΏΠΎΡ‚ΠΎΠΊΠ°:

И ΠΏΡ€ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, сСрвСр ΡƒΡ…ΠΎΠ΄ΠΈΠ» Π² Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π·Π°ΠΏΠΎΠΉ лоТился Π² спячку. ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ сдСлал Π΄Π²Π΅ ошибки β€” взяв статичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 500 ΠΈ Π½Π΅ разобрался ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Ρ‚Π°ΠΊΠΎΠΉ RW-mutex Π½Π° этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Π’.ΠΊ. RW-mutex Π±Ρ‹Π» сдСлан fair β€” использовался ΠΊΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

Π’.Π΅. ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ hashTab 100-Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ нСсколькими reader-ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ 100*500 Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ (ΠΈ Π²Ρ‹ΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² осадок Π½Π° нСсколько милисСкунд ΠΈΠ·-Π·Π° context switch). Π‘Π°ΠΌΠΎΠ΅ интСрСсноС Π² этой истории, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π» Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс RWSyncHashTable, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ повсСмСстно Π² нашСм ΠΊΠΎΠ΄Π΅.
НуТно Ρ‡Π΅Ρ‚ΠΊΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ конструкции API ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ синхронизированы. Иногда это Π΄Π°ΠΆΠ΅ конструктор ΠΈ дСструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ этом случаС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ синхронизация β€” часто Π²Ρ€Π΅Π΄. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚ΠΎΡ‚ случай, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΡˆΡƒ маслом ΠΈΡΠΏΠΎΡ€Ρ‚ΠΈΡˆΡŒ.
Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ источники, заглядывайтС Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΊ API β€” ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ляпы, с большСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΎΠ±ΠΎΠΉΠ΄ΡƒΡ‚ Вас стороной.

Бинхронизация исполнСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наш процСсс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΆΠ΄Π΅Ρ‚. Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ соврСмСнных систСм давольно Π³ΠΈΠ±ΠΊΠΈ, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡˆΠΈΠ΅ конструкции:

НавСрноС стоит Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π½Π° этом ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ (Π°-Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡƒΠΊΠ²). Если Π³Π΄Π΅-Ρ‚ΠΎ написал прописныС для ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ истины, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠΊΠΎΡ€Π½ΠΎ β€” Π½Π΅ со Π·Π»Π°. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, поТСлания, ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌ. Н. Π­. Π‘Π°ΡƒΠΌΠ°Π½Π°
Bauman National Library

ΠŸΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ β€” свойство ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, опСрационная систСма, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина ΠΈ Ρ‚. Π΄.) ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС/прилоТСния, состоящСС Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ процСсс, ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½Ρ‹ΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· прСдписанного порядка Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивного использования рСсурсов Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. [Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ 1]

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ОписаниС

Π‘ΡƒΡ‚ΡŒΡŽ многопоточности являСтся ΠΊΠ²Π°Π·ΠΈΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ исполняСмого процСсса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² адрСсном пространствС процСсса. ΠšΡ€ΠΎΠΌΠ΅ этого, всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ процСсса ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ‰Π΅Π΅ адрСсноС пространство, Π½ΠΎ ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор (дСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ²). Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ процСсс ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ (Π³Π»Π°Π²Π½Ρ‹ΠΉ) ΠΏΠΎΡ‚ΠΎΠΊ.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ, Π½ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΠΎΡΡ‚ΡŒΡŽ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ опСрационная систСма (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы), Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ.

К достоинствам ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ систСмы ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°Ρ‡Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

К достоинствам ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ систСмы ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’ случаС, Ссли ΠΏΠΎΡ‚ΠΎΠΊΠΈ выполнСния Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТного взаимодСйствия Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ проявлСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ многозадачности, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ 2 API ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ программирования:

Π—Π΄Π΅ΡΡŒ рассматриваСтся Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ POSIX (Portable Operating System Interface for Unix). ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ этого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ Π² своих ΠΈΠΌΠ΅Π½Π°Ρ… прСфикс pthread_ ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ pthread.h.

Аппаратная рСализация

Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ многопоточности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² процСссорах Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ:

Π’ΠΈΠΏΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ВзаимодСйствиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π’ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ приостановки ΠΈ возобновлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ΄Π½ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² зависимости ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ…. Π’ частности это Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² доступа ΠΏΡ€ΠΈ использовании ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ устройств ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ исполняСмых ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ для взаимодСйствия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΡ‹), сСмафоры, критичСскиС сСкции, события ΠΈ Ρ‚.ΠΏ. МногиС ΠΈΠ· этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ядра ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса, Π½ΠΎ ΠΈ для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… процСссов.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ func_p. Π­Ρ‚Π° функция ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ (void *) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. РСально ΠΆΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ пСрСдаСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ arg_p. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° возвращаСтся Ρ‡Π΅Ρ€Π΅Π· tid_p.

АргумСнт attr_p ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° структуру, Π·Π°Π΄Π°ΡŽΡ‰ΡƒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ вновь создаваСмого ΠΏΠΎΡ‚ΠΎΠΊΠ°. Если attr_p=NULL, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ «ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ» (Π½ΠΎ это плохая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‚.ΠΊ. Π² Ρ€Π°Π·Π½Ρ‹Ρ… ОБ эти значСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, хотя дСкларируСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅). Одна структура, указываСмая attr_p, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для управлСния нСсколькими ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ attr_p, значСниями «ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ» (ΠΏΡ€ΠΈ этом распрСдСляСтся ΠΊΠΎΠ΅-какая ΠΏΠ°ΠΌΡΡ‚ΡŒ). Атрибуты ΠΏΠΎΡ‚ΠΎΠΊΠ°:

ОсвобоТдСниС памяти Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ°

ΠžΠ±Π»Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ

БостояниС отсоСдинСнности

Для отсоСдинСнного ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ окончания Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, поэтому послС окончания Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° всС Π΅Π³ΠΎ рСсурсы ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ освобоТдСны (ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ).

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ exit(), ΠΎΠ΄Π½Π°ΠΊΠΎ это Π²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ всСх ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ процСсса Π² Ρ†Π΅Π»ΠΎΠΌ. ΠŸΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ вмСстС с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ return() Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ pthread_create(). ΠŸΠΎΡ‚ΠΎΠΊ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

допустимо Π² качСствС status ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NULL. ΠŸΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_cancel() (с этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ pthread_setcanceltype, pthread_setcancelstate ΠΈ pthread_testcancel).

ОТиданиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся Π΄ΠΎ окончания ΠΏΠΎΡ‚ΠΎΠΊΠ° с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ tid. ΠŸΠΎΡ‚ΠΎΠΊ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ tid Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отсоСдинСнным

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° управлСния Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ

ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Ρ€Π°Π²Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ больший ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

ΠŸΠΎΡΡ‹Π»ΠΊΠ° сигнала ΠΏΠΎΡ‚ΠΎΠΊΡƒ

ΠŸΠΎΡΡ‹Π»Π°Π΅Ρ‚ сигнал с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ signum Π² ΠΏΠΎΡ‚ΠΎΠΊ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ tid.

ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сигнальной маской ΠΏΠΎΡ‚ΠΎΠΊΠ°

Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΡΠΈΠ³Π½Π°Π»ΡŒΠ½ΡƒΡŽ маску ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² соотвСтствии с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ mode, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° old_p Π½Π΅ Ρ€Π°Π²Π½ΠΎ NULL, Ρ‚ΠΎ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ old_p, помСщаСтся ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ содСрТимоС сигнальной маски.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² управлСния

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π΄ΠΈΠ½ΠΎΠ΅ адрСсноС пространство. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступны ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ срСдства управлСния доступом ΠΊ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ. Π—Π΄Π΅ΡΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС стандартных срСдств синхронизации Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… процСссов: ΠΊΠ°Π½Π°Π»Ρ‹, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ сообщСний, мСТпроцСссныС сСмафоры. Однако, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΌΠ΅ΠΆΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ взаимодСйствия ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ срСдства:

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ срСдства пСрСчислСны Π² порядкС ΡƒΡ…ΡƒΠ΄ΡˆΠ΅Π½ΠΈΡ ΠΈΡ… эффСктивности. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ доступ ΠΊ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ (char, int, double) рСализуСтся Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ‚Π°ΠΊΡ‚ процСссора, поэтому ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации (зависящиС ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ сами ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС срСдства синхронизации.

Π’Π·Π°ΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ

Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, освобоТдая Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pthread_mutex_lock() ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. Если ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ставится Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ (с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²) ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅. ПослС Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_mutex_lock() Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ.

Ѐункция pthread_mutex_unlock() освобоТдаСт Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ. ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π΅ Π²Π»Π°Π΄Π΅Π»Π΅Ρ†.

УсловныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² сочСтании со взаимоис ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ. ΠžΠ±Ρ‰Π°Ρ схСма использования Ρ‚Π°ΠΊΠΎΠ²Π°. Один ΠΏΠΎΡ‚ΠΎΠΊ устанавливаСт Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ сСбя ΠΏΠΎ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_cond_wait()), ΠΏΡ€ΠΈ этом автоматичСски (Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ) освобоТдаСтся Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°. Когда ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ посрСдством Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_cond_signal() сигнализируСт ΠΏΠΎ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ разблокируСтся ΠΈ Π΅ΠΌΡƒ возвращаСтся Π²ΠΎ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°.

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, выдСляя ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ.

автоматичСски освобоТдаСт Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ mp, Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся ΠΏΠΎ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ cvp. Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ разблокируСтся функциями pthread_cond_signal() ΠΈ pthread_cond_broadcast(). Одной условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_cond_wait(), Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ разблокируСтся (Ссли этого Π½Π΅ Π±Ρ‹Π»ΠΎ сдСлано Ρ€Π°Π½Π΅Π΅).

Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½ΡƒΡŽ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΡ‚ΠΎΠΊ. Если сигнала ΠΏΠΎ условной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ….

Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½ΡƒΡŽ ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€Ρ‹

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ прСдставляСт собой Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Ρ‚ΡŒ (post) ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ (wait) Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Если ΠΏΠΎΡ‚ΠΎΠΊ пытаСтся ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ сСмафор Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ становится ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся. ΠŸΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ станСт Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ послС ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ (Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ) ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ.

ΠŸΠΎΡ‚ΠΎΠΊΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ условныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π½ΠΈΡ… Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ «Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°», Ρ‚.Π΅. ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора ΠΌΠΎΠΆΠ΅Ρ‚ любой ΠΏΠΎΡ‚ΠΎΠΊ.

Π’ POSIX-вСрсии срСдств ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ программирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ самыС сСмафоры, Ρ‡Ρ‚ΠΎ ΠΈ для мСТпроцСссного взаимодСйствия.

ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Π½Π° 1, ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½ (ΠΈΠ·, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…) ΠΏΠΎΡ‚ΠΎΠΊ (ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ).

пытаСтся ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Π½Π° 1. Если ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сСмафора Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ блокируСтся.

Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π°Ρ вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sem_wait().

Π‘Π°Ρ€ΡŒΠ΅Ρ€Ρ‹

Π‘Π°Ρ€ΡŒΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для синхронизации Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² управлСния. Π‘Π°Ρ€ΡŒΠ΅Ρ€ характСризуСтся Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΌ числом count, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΌ количСство синхронизируСмых ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡ‚ΠΎΠΊ управлСния, «ΠΏΠΎΠ΄ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΉ» ΠΊ Π±Π°Ρ€ΡŒΠ΅Ρ€Ρƒ (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΠΉΡΡ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_barrier), блокируСтся Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° накоплСния ΠΏΠ΅Ρ€Π΅Π΄ этим Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ количСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² count.

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°Ρ€ΡŒΠ΅Ρ€, выдСляя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, устанавливая значСния Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ назначая count «ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ» Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. Π’ настоящСС врСмя Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠ² Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ поэтому Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pthread_barrier_init слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NULL.

Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Π±Π°Ρ€ΡŒΠ΅Ρ€, освобоТдая Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

приостанавливаСт Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° накоплСния ΠΏΠ΅Ρ€Π΅Π΄ Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ count ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π—Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½ сигналом, ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сигнала (Ссли ΠΎΠ½ Π±Ρ‹Π» Π½Π°Π·Π½Π°Ρ‡Π΅Π½) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ Π² состояниС оТидания, Ссли ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ΅ количСство count ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΅Ρ‰Π΅ Π½Π΅ скопилось ΠΏΠ΅Ρ€Π΅Π΄ Π±Π°Ρ€ΡŒΠ΅Ρ€ΠΎΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *