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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

БущСствуСт нСсколько ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ DEC, Java, POSIX, Win32. Perl ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ свою модСль ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΡƒΡŽΡΡ ΠΎΡ‚ пСрСчислСнных ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ свои достоинства ΠΈ нСдостатки. ПоявлСниС Π² Perl кросс-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… срСдств Ρ€Π°Π±ΠΎΡ‚Ρ‹ с лСгковСсными процСссами стало нСсомнСнным достиТСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ заставило ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡƒ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ лСгковСсных процСссов позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эффСктивныС прилоТСния, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с лСгковСсными процСссами просто. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нитями ΠΏΡ€Π°Π³ΠΌΠΎΠΉ use threads, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° threads->new (синоним: threads->create). Π­Ρ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ пСрСдаСтся ссылка Π½Π° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ»ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая запускаСтся Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ создания Π½ΠΈΡ‚ΠΈ станСт ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° threads, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡ‚ΠΈ выглядит Ρ‚Π°ΠΊ:


use threads; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ срСдства my $thread = threads->new(\&pearl_thread); # Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½ΠΈΡ‚ΡŒ sub pearl_thread { # эта ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° print "Π­Ρ‚ΠΎ Π½ΠΈΡ‚ΡŒ.\n"; # Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½ΠΈΡ‚ΡŒ } #


Π˜Ρ‚Π°ΠΊ, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ дСйствиям Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΡƒΠ΄Π° ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ? Π­Ρ‚ΠΎ задаСтся Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° join, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приостанавливаСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния Π½ΠΈΡ‚ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, вычислСнный Π½ΠΈΡ‚ΡŒΡŽ:


@result = $thread->join;


ДСйствиС, выполняСмоС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ join, называСтся "присоСдинСниС Π½ΠΈΡ‚ΠΈ" ΠΈΠ»ΠΈ "объСдинСниС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²". Как это происходит, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 16.2.

Рис. 16.2.  ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½ΠΈΡ‚ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ join()

КаТдой Π½ΠΈΡ‚ΠΈ присваиваСтся числовой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Thread Identifier, TID), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tid. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΈΡ‚Π΅ΠΉ, объСдинСниС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:


use threads; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ срСдства my @thread = (); # массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° threads for (my $i = 0; $i <= 2; $i++) { # создаСм 3 Π½ΠΈΡ‚ΠΈ $thread[$i] = threads->new(\&pearl_thread, $i); print "Π‘ΠΎΠ·Π΄Π°Π½Π° $i-я Π½ΠΈΡ‚ΡŒ. TID=", $thread[$i]->tid, "\n"; } for (my $i = 2; $i >= 0; $i--) { # присоСдиняСм Π½ΠΈΡ‚ΠΈ print "$i-я Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΠ»Π° ", $thread[$i]->join, "\n"; } sub pearl_thread ($) { # Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ my $number = shift; # число, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ my $random = int(rand(7)) + 1; # случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, print "\t$number-я Π½ΠΈΡ‚ΡŒ ΠΆΠ΄Π΅Ρ‚ $random сСк.\n"; sleep $random; # ΠΈ, ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Π² Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, return $random; # Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ }


БообщСния, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ нСзависимоС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΡ‚Π΅ΠΉ ΠΈ основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:


Π‘ΠΎΠ·Π΄Π°Π½Π° 0-я Π½ΠΈΡ‚ΡŒ. TID=1 Π‘ΠΎΠ·Π΄Π°Π½Π° 1-я Π½ΠΈΡ‚ΡŒ. TID=2 1-я Π½ΠΈΡ‚ΡŒ ΠΆΠ΄Π΅Ρ‚ 7 сСк. 0-я Π½ΠΈΡ‚ΡŒ ΠΆΠ΄Π΅Ρ‚ 1 сСк. Π‘ΠΎΠ·Π΄Π°Π½Π° 2-я Π½ΠΈΡ‚ΡŒ. TID=3 2-я Π½ΠΈΡ‚ΡŒ ΠΆΠ΄Π΅Ρ‚ 3 сСк. 2-я Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΠ»Π° 3 1-я Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΠ»Π° 7 0-я Π½ΠΈΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΠ»Π° 1


ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ "ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ", игнорируя Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: это дСлаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ $thread->detach, послС выполнСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π½ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Нити, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ: скалярам, массивам ΠΈ Ρ…ΡΡˆΠ°ΠΌ. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ явного указания для раздСляСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° shared. ΠŸΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Π°Ρ этим Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ доступна для чтСния ΠΈ измСнСния Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Для ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ отсоСдинСнии Π½ΠΈΡ‚ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠΎΠΏΠΈΠΈ. Π­Ρ‚ΠΎ дСмонстрируСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ:


use threads; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ срСдства use threads::shared; # ΠΈ срСдства раздСлСния Π΄Π°Π½Π½Ρ‹Ρ… my $public : shared = 0; # раздСляСмая пСрСмСнная my $private = 0; # нСраздСляСмая пСрСмСнная threads->new(sub { # Π½ΠΈΡ‚ΡŒ ΠΈΠ· Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ $public++; $private++; # измСняСм значСния print "$public $private\n"; # Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ: 1 1 })->join; # доТидаСмся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния: print "$public ", # 1 ($public ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π² Π½ΠΈΡ‚ΠΈ) "$private\n"; # 0 (Π² Π½ΠΈΡ‚ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° копия $private)


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ нитями значСния раздСляСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lock(). Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ происходит Π½Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°. Π­Ρ‚ΠΎ дСлаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


{ # Π±Π»ΠΎΠΊ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с раздСляСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ lock $variable; # Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $variable = $new_value; # ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ } # здСсь $variable автоматичСски разблокируСтся


Нити ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартного модуля Thread::Queue организуСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для синхронизированной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ рассмотрСнными Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ. НСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ скалярныС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ enqueue() ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ dequeue(). ΠœΠ΅Ρ‚ΠΎΠ΄ pending() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ элСмСнтов, поэтому ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для окончания Ρ†ΠΈΠΊΠ»Π° чтСния ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ:


use threads; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ срСдства use Thread::Queue; # ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ my $data_queue = Thread::Queue->new; # создаСм ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ my $thread = threads->new(\&reader); # ΠΈ Π½ΠΈΡ‚ΡŒ # ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ скалярныС Π΄Π°Π½Π½Ρ‹Π΅: $data_queue->enqueue(1987); # число $data_queue->enqueue('Π³ΠΎΠ΄'); # строку $data_queue->enqueue('роТдСния', 'Perl'); # список $thread->join; # ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ окончания Π½ΠΈΡ‚ΠΈ exit; # ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ sub reader { # ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, while ($data_queue->pending) { # ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ пуста my $data_element = $data_queue->dequeue; print "'$data_element' ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ\n"; } }


АвтоматичСская синхронизация доступа ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΡΡ‚ΡŒ записи Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· выполнСния этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:


'1987' ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ 'Π³ΠΎΠ΄' ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ 'роТдСния' ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ 'Perl' ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ


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

БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ ситуаций, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ многозадачности Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎ, Π½ΠΎ ΠΈ являСтся СдинствСнно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π½Π°Π½ΠΈΠ΅ срСдств управлСния процСссами Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ зрСния Π½Π° Ρ€Π΅ΡˆΠ°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ваш арсСнал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… инструмСнтов. Π’ 6-ΠΉ вСрсии языка Perl срСдства распрСдСлСнного программирования Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Ρ‹ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Ρ‹, появятся сопрограммы (co-routines) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС возмоТности.

ЛСкция 17. Π Π°Π±ΠΎΡ‚Π° Π² IP-сСтях

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ рассказываСтся ΠΎΠ± ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² Perl возмоТностях ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² IP-сСтях, начиная с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… срСдств ΠΈ заканчивая классами для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с основными сСтСвыми ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ.

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ: ΡƒΠ·Π½Π°Ρ‚ΡŒ основныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти ΠΈ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ стандартныС ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Perl.

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

ΠŸΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… сСтСй Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° основС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… IP (Internet Protocol), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°ΠΌΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… сСтях. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» - это систСма ΠΏΡ€Π°Π²ΠΈΠ» для согласованного взаимодСйствия ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. ΠŸΡ€ΠΈ сСтСвом взаимодСйствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ стСком ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подраздСляСтся Π½Π° нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия ΠΈ прСобразования Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» IP ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° сСтСвой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доставки ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ (packet).

Для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² сСти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… сСтСвых устройств, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… хостами (host), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… чисСл - IP-адрСса: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 192.168.82.83 ΠΈΠ»ΠΈ 172.16.2.73. НазначСнный IP-адрСс слуТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ хоста Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ сСти. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ хост, настроСнный Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ IP ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊ сСти, ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс 127.0.0.1 - Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ мСстоимСния "я" Π½Π° языкС сСтСвых ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΉ. Π₯ост ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ имя, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΅Π³ΠΎ IP-адрСсу, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, имя хоста www.perl.com соотвСтствуСт адрСсу 208.201.239.36. БобствСнному адрСсу 127.0.0.1 соотвСтствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ имя localhost. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ хостС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСсколько сСтСвых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚ΠΎ для распрСдСлСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΈ отправляСмых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числовыС обозначСния, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ программная Ρ‚ΠΎΡ‡ΠΊΠ° отправлСния ΠΈΠ»ΠΈ доставки Π΄Π°Π½Π½Ρ‹Ρ… Π² IP-сСтях опрСдСляСтся сочСтаниСм адрСса ΠΈ ΠΏΠΎΡ€Ρ‚Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. МногиС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΏΠΎ общСпринятым соглашСниям Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ сСтСвыми слуТбами. НапримСр, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ web-сСрвСру Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ машинС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ адрСсу ΠΈ ΠΏΠΎΡ€Ρ‚Ρƒ 127.0.0.1:80, Π° ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ сСрвСру - ΠΏΠΎ 127.0.0.1:25.