Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² срСдС WindowsΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 59

Автор ДТонсон Π₯Π°Ρ€Ρ‚

МодСль "хозяин/Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ" ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° grepMT дСмонстрируСт модСль ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎΡΡΡ‰ΡƒΡŽ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ "хозяин/Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ" ("boss/worker"), Π° рис. 6.3, послС Π·Π°ΠΌΠ΅Π½Ρ‹ Π² Π½Π΅ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° "процСсс" Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "ΠΏΠΎΡ‚ΠΎΠΊ", ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ графичСской ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ. Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ (основной ΠΏΠΎΡ‚ΠΎΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС) ΠΏΠΎΡ€ΡƒΡ‡Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск, Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅.

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

Рис. 7.2. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сортировки слияниСм с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²


Двумя Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ основными модСлями ΡΠ²Π»ΡΡŽΡ‚ΡΡ модСль "ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр" (client/server) (ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° рис. 7.1, Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅Π΅ практичСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ рассматриваСтся Π² Π³Π»Π°Π²Π΅ 11) ΠΈ конвСйСрная модСль (pipeline model), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ задания пСрСдаСтся ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ многоступСнчатого ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° рассматриваСтся Π² Π³Π»Π°Π²Π΅ 10 ΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π½Π° рис. 10.1).

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… систСм эти ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Ρ†Π΅Π»Ρ‹ΠΌ рядом прСимущСств, ΠΊ числу ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β€’ Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ с использованиСм ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· стандартных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

β€’ ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ понятных ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ написании ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½ΠΎ ΠΈ способствуСт ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

β€’ Π­Ρ‚ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ структурС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ программирования.

β€’ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π°ΠΌ, ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π΅Π΅ устройство, Ссли ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ описана Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° понятном языкС. 

β€’ ΠΠ°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ Π² Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅, Ссли Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. ΠžΡ‡Π΅Π½ΡŒ часто Π³Π»Π°Π²Π½ΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ удаСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° основании Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ… Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

β€’ ΠœΠ½ΠΎΠ³ΠΈΠ΅ распространСнныС Π΄Π΅Ρ„Π΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ условий состязаний Π·Π°Π΄Π°Ρ‡ ΠΈ ΠΈΡ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ с использованиСм простых ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΊ числу ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… относятся эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ использования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² синхронизации, описанныС Π² Π³Π»Π°Π²Π°Ρ… 9 ΠΈ 10.

Π­Ρ‚ΠΈ классичСскиС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ОБ. Π’ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Component Object Model, COM), ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Windows-систСмах, примСняСтся другая тСрминология, ΠΈ хотя рассмотрСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ БОМ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΎΠ± этих модСлях говорится Π² ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹ 11, Π³Π΄Π΅ ΠΎΠ½ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° "раздСляй ΠΈ властвуй" для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ сортировки слияниСм Π² SMP-систСмах

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт возмоТности Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π° счСт использования ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², особСнно Π² случаС SMP-систСм. Основная идСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅, распрСдСлСнии выполнСния ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ объСдинСнии Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² для получСния ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Windows автоматичСски Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссоры, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, сниТая ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния прилоТСния.

Π­Ρ‚Π° стратСгия, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ стратСгиСй "раздСляй ΠΈ властвуй" (divide and conquer), ΠΈΠ»ΠΈ модСлью Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ (work crew model), оказалась вСсьма ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈ Π² качСствС срСдства ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈ Π² качСствС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° проСктирования Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Одним ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΅Π΅ примСнСния слуТит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° grepMT (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.1), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ для поиска шаблона создаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ B, Π² случаС SMP-систСм ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ процСссорами.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π°Π΄Π°Ρ‡Π° сортировки содСрТимого Ρ„Π°ΠΉΠ»Π° разбиваСтся Π½Π° ряд ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСлСгируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ.

РСшСниС Π·Π°Π΄Π°Ρ‡ΠΈ сортировки слияниСм (merge-sort), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сортируСмый массив разбиваСтся Π½Π° нСсколько массивов мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, являСтся классичСским ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, построСнного Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ "раздСляй ΠΈ властвуй". ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· массивов нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сортируСтся ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, послС Ρ‡Π΅Π³ΠΎ отсортированныС массивы ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ с ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ отсортированных массивов большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. ОписанноС слияниС массивов ΠΏΠΎΠΏΠ°Ρ€Π½ΠΎ осущСствляСтся Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСго процСсса сортировки. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, сортировка слияниСм начинаСтся с массивов размСрности 1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами ΠΏΠΎ сСбС Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² сортировкС. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сортировка начинаСтся с массивов большСй размСрности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ процСссор ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ массиву. Π‘Π»ΠΎΠΊ-схСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° рис. 7.2.

Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ прСдставлСны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ 7.2. Число Π·Π°Π΄Π°Ρ‡ задаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ сортировки ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π’. Π’ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 7.9 Π²Π°ΠΌ прСдлагаСтся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ sortMT Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° сначала опрСдСляла количСство доступных процСссоров, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для этого Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GetSystemInfo, Π° Π·Π°Ρ‚Π΅ΠΌ создавала ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСссора.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° 7.2. sortMT: сортировка слияниСм с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² 

/* Π“Π»Π°Π²Π° 7. SortMT.

   Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (рабочая Π³Ρ€ΡƒΠΏΠΏΠ°).

   sortMT [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹] число_Π·Π°Π΄Π°Ρ‡ Ρ„Π°ΠΉΠ» */


#include "EvryThng.h"

#define DATALEN 56 /* Π”Π°Π½Π½Ρ‹Π΅: 56 Π±Π°ΠΉΡ‚; ΠΊΠ»ΡŽΡ‡: 8 Π±Π°ΠΉΡ‚. */

#define KEYLEN 8


typedef struct _RECORD {

 CHAR Key[KEYLEN];

 TCHAR Data[DATALEN];

} RECORD;


#define RECSIZE sizeof (RECORD)

typedef RECORD * LPRECORD;


typedef struct _THREADARG { /* АргумСнт ΠΏΠΎΡ‚ΠΎΠΊΠ° */

 DWORD iTh; /* НомСр ΠΏΠΎΡ‚ΠΎΠΊΠ°: 0, 1, 2, … */

 LPRECORD LowRec; /* Младшая Ρ‡Π°ΡΡ‚ΡŒ указатСля записи */

 LPRECORD HighRec; /* Π‘Ρ‚Π°Ρ€ΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ указатСля записи */

} THREADARG, *PTHREADARG;


static int KeyCompare(LPCTSTR, LPCTSTR);

static DWORD WINAPI ThSort(PTHREADARG pThArg);

static DWORD nRec; /* ΠžΠ±Ρ‰Π΅Π΅ число записСй, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… сортировкС. */

static HANDLE* ThreadHandle;


int _tmain(int argc, LPTSTR argv[]) {

 HANDLE hFile;

 LPRECORD pRecords = NULL;

 DWORD FsLow, nRead, LowRecNo, nRecTh, NPr, ThId, iTh;

 BOOL NoPrint;

 int iFF, iNP;

 PTHREADARG ThArg;

 LPTSTR StringEnd;

 iNP = Options(argc, argv, _T("n"), &NoPrint, NULL);

 iFF = iNP + 1;

 NPr = _ttoi(argv[iNP]); /* ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². */

 hFile = CreateFile(argv[iFF], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

 FsLow = GetFileSize(hFile, NULL);

 nRec = FsLow / RECSIZE; /* ΠžΠ±Ρ‰Π΅Π΅ число записСй. */

 nRecTh = nRec / NPr; /* ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ записСй Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ. */

 /* Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ массива дСскрипторов ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² памяти мСсто для Ρ„Π°ΠΉΠ»Π°. Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь Ρ„Π°ΠΉΠ». */

 ThArg = malloc(NPr * sizeof(THREADARG));

 /* АргумСнты ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². */

 ThreadHandle = malloc(NPr * sizeof(HANDLE));