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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 215

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

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

ИдСя ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π»Π° популярна ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠšΠΎΠΌΠΈΡ‚Π΅Ρ‚ IEEE POSIX Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стандарты, ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСны Π² UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… поставщиков сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π‘ появлСниСм стандарта POSIX 1003.1c всС измСнилось; ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΡƒΡ‡ΡˆΠ΅ стандартизованы, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux. Π’ нашС врСмя многоядСрныС процСссоры стали ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π΄Π°ΠΆΠ΅ Π² Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° машин Π΅ΡΡ‚ΡŒ низкоуровнСвая аппаратная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. РаньшС ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ одноядСрных ЦПУ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ исполнСниС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ лишь ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, хотя ΠΈ ΠΎΡ‡Π΅Π½ΡŒ эффСктивной иллюзиСй.

Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ОБ Linux обзавСлась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠΊΠΎΠ»ΠΎ 1996 Π³. благодаря появлСнию Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ "LinuxThreads" (ΠΏΠΎΡ‚ΠΎΠΊΠΈ Linux). Она ΠΏΠΎΡ‡Ρ‚ΠΈ соотвСтствуСт стандарту POSIX (Π½Π° самом Π΄Π΅Π»Π΅ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв отличия Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹) ΠΈ стала Π²Π°ΠΆΠ½Ρ‹ΠΌ шагом Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ примСнСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² программистами Linux. Но ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Linux ΠΈ стандартом POSIX Π΅ΡΡ‚ΡŒ слабыС расхоТдСния, Π² основном ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сигналов. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, сколько Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ядра Linux.

Π Π°Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ рассматривали возмоТности ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Linux, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ устранСния слабых расхоТдСний со стандартом POSIX, Π½ΠΎ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ удалСния Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Основная Ρ€Π°Π±ΠΎΡ‚Π° Π±Ρ‹Π»Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° поиск способов отобраТСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ уровня Π½Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ уровня ядра систСмы. Двумя Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π±Ρ‹Π»ΠΈ New Generation POSIX Threads (NGPT, ΠΏΠΎΡ‚ΠΎΠΊΠΈ POSIX Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния) ΠΈ Native POSIX Thread Library (NPTL, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° истинных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² POSIX). Оба ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ внСсти измСнСния Π² ядро Linux, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΈ ΠΎΠ±Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π»ΠΈ сущСствСнноС ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Linux.

Π’ 2002 Π³. ΠΊΠΎΠΌΠ°Π½Π΄Π° NGPT объявила, Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ сообщСство ΠΈ приостанавливаСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… срСдств для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° NGPT, Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ОБ Linux, присоСдинив свои усилия ΠΊ стараниям NPTL. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° NPTL стала Π½ΠΎΠ²Ρ‹ΠΌ стандартом для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Linux, выпустив ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π² дистрибутивС Red Hat Linux 9. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠ½ΡƒΡŽ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ NPTL Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ "The Native POSIX Thread Library for Linux" ("Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° истинных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² POSIX для Linux") Π£Π»ΡŒΡ€ΠΈΡ…Π° Π”Ρ€Π΅ΠΏΠΏΠ΅Ρ€Π° (Ulrich Drepper) ΠΈ Инго ΠœΠΎΠ»ΡŒΠ½Π°Ρ€Π° (Ingo Molnar), которая Π²ΠΎ врСмя написания ΠΊΠ½ΠΈΠ³ΠΈ Π±Ρ‹Π»Π° доступна Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΠΏΠΎ адрСсу http://people.redhat.com/drepper/nptl-design.pdf.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ· этой Π³Π»Π°Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с любой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ основана Π½Π° стандартС POSIX, ΠΎΠ±Ρ‰Π΅ΠΌ для всСх Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Но Π²Ρ‹ смоТСтС Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ нСбольшиС отличия, Ссли ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ старой вСрсиСй дистрибутива Linux, особСнно ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

ps
для просмотра ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²ΠΎ врСмя ΠΈΡ… выполнСния.

Достоинства ΠΈ нСдостатки ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°Ρ… созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ явно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ прСимущСствами ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса. НакладныС расходы ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° сущСствСнно мСньшС, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса (нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ созданиС Π½ΠΎΠ²Ρ‹Ρ… процСссов Π² Linux ΠΎΡ‡Π΅Π½ΡŒ эффСктивно ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами).

Π”Π°Π»Π΅Π΅ пСрСчислСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ достоинства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

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

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

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

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

Π£ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки.

β–‘Β Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ появлСния Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… сбоСв ΠΈΠ»ΠΈ ошибок, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… нСчаянным совмСстным использованиСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π² Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ вСсьма Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°. Алан Кокс (Alan Π‘ΠΎΡ…, всСми ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ Π³ΡƒΡ€Ρƒ Linux) сказал, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ ΡƒΠΌΠ΅Π½ΠΈΡŽ "Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΎΠ±Π΅ собствСнныС Π½ΠΎΠ³ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ".

β–‘Β ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, Ρ‡Π΅ΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° исполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ взаимосвязи ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

β–‘Β ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ вычислСния Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° Π΄Π²Π΅ части, ΠΈ эти Π΄Π²Π΅ части Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС Π½Π° машинС с ΠΎΠ΄Π½ΠΈΠΌ процСссором, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вычислСниС Π½Π΅ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Π΅ Π΅Π΅ части ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½Π΅Ρ‚ многоядСрного процСссора для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ истинной многопоточности.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

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

_REENTRANT
, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» pthread.h ΠΈ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ
-lpthread
.

Когда Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ UNIX ΠΈ POSIX, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ процСссС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ исполнСния. Π―Ρ€ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” пСрСмСнная

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