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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠšΠΎΠ΄Π΅Ρ€Ρ‹ Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ. Π Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ ΠΎ рСмСслС программиста». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 61

Автор ΠŸΠΈΡ‚Π΅Ρ€ Π‘Π΅ΠΉΠ±Π΅Π»

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

Π‘Π΅ΠΉΠ±Π΅Π»: ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π½Π°Π·Π²Π°Ρ‚ΡŒ Ρ…ΡƒΠ΄ΡˆΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ· Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ?

Π‘Π»ΠΎΡ…: МнС сразу ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡˆΠΌΠ°Ρ€Π½Ρ‹ΠΉ ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ случай. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ 1990-Ρ…, я Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Π» Π² ΠΏΠΈΡ‚Ρ‚-сбургской ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Transarc. МнС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ раздСляСмой памяти ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ‚Π½ΠΎΠΌ Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ я Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ» Π² срок ΠΈ Π΄Π°ΠΆΠ΅ успСл Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Но я Π½Π΅Ρ€Π²Π½ΠΈΡ‡Π°Π» ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π» ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² спСшкС.

Для тСстирования ΠΊΠΎΠ΄Π° я написал Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΡ‰Π½ΠΎΠ³ΠΎ β€œΡƒΠ±ΠΈΠΉΡ†Ρƒβ€. Он запускал мноТСство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТала рСкурсивно Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ - Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ влоТСния. КаТдая ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³Π»Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты раздСляСмого массива Π² восходящСм порядкС ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ…, сохраняя ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сумма всСх элСмСнтов массива Ρ€Π°Π²Π½ΡΠ»Π°ΡΡŒ Π½ΡƒΠ»ΡŽ. КаТдая субтранзакция Π»ΠΈΠ±ΠΎ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ, Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π»Π°ΡΡŒ - ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ случаСв Π±Ρ‹Π»ΠΎ 90:10, ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² запускали эти Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈ воздСйствовали Π½Π° массив Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я тСстировал Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‚ΠΎ запускал нСсколько ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… β€œΡƒΠ±ΠΈΠΉΡ†β€, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π² своСм собствСнном процСссС.

ΠŸΡ€ΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ многопоточности β€œΡƒΠ±ΠΈΠΉΡ†Π°β€ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π²ΠΏΠΎΠ»Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ. Но ΠΊΠΎΠ³Π΄Π° этот ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ повысился, я ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° - ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° - β€œΡƒΠ±ΠΈΠΉΡ†Π°β€ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ цСлостности. Π― Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Ρ‡Ρ‚ΠΎ дСлаСтся, ΠΈ, СстСствСнно, Π΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ это моя ошибка - вСдь я написал ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘ нСдСлю я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° - всС Π±Ρ‹Π»ΠΎ Π² порядкС. ΠŸΠΎΡ‚ΠΎΠΌ я написал ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠ³ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ измСнСния - ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ»ΡƒΡ‡Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ элСмСнт Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. НаконСц я ΡƒΠ»ΠΎΠ²ΠΈΠ» Π½Π΅ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ - Ρ‚Π°ΠΊΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ происходящСС. И ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄Ρƒ: ΠΌΠΎΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ. Π£ мСня Π±Ρ‹Π»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ‚ΠΈΠΏΠ° β€œΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ-ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ-Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒβ€, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΈ, Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΠΈ записывали ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. И послСдняя запись Π·Π°Ρ‚ΠΈΡ€Π°Π»Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ.

Π― написал собствСнный диспСтчСр Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, поэтому стал ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Но вСдь ΠΎΠ½ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ тСсты! НаконСц я ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ», Ρ‡Ρ‚ΠΎ Π²ΠΈΠ½ΠΎΠ²Π°Ρ‚ Π±Ρ‹Π» Π½Π΅ ΠΎΠ½, Π° рСализация ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² Π² Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌ слоС. Π’ΠΎΠ³Π΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ для Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ самим. Π’Ρ‹ΡˆΠ»ΠΎ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π²ΡˆΠΈΠΉ Π·Π° ΠΊΠΎΠ΄ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ², случайно ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Π» ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ β€œΠ·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒβ€ ΠΈ β€œΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒβ€ Π² ассСмблСрной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² Solaris. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Π±Π΅Π·ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. И ΠΊΠΎΠ³Π΄Π° случался ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ - Π² Ρ‚ΠΎ врСмя Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ, - Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ оказывался Π² критичСской сСкции, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π‘Π°ΠΌΠΎΠ΅ Π·Π°Π±Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ вся компания Π½Π° нСсколько нСдСль оказалась Π±Π΅Π· ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ², ΠΈ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ».

Π’ своСй прСвосходной ΡΡ‚Π°Ρ‚ΡŒΠ΅ β€œEngineering a Sort Function” (Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Sort) Π‘Π΅Π½Ρ‚Π»ΠΈ ΠΈ ΠœΠ°ΠΊΠΈΠ»Ρ€ΠΎΠΉ Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‚ чудСсноС высказываниС ΠšΠ½ΡƒΡ‚Π° насчСт привСдСния сСбя Π² самоС ΠΏΠΎΠ³Π°Π½ΠΎΠ΅ настроСниС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ способны. Как Ρ€Π°Π· это я ΠΈ сдСлал для Ρ‚ΠΎΠΉ сСрии тСстов. Но это сдСлало ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠΌΠΎΠΉ. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΈΠ·-Π·Π° многопоточности ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случай оказывался ΠΏΠΎΡ‡Ρ‚ΠΈ нСвоспроизводимым. Π”Π°Π»Π΅Π΅, оказались Π»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ ΠΌΠΎΠΈ прСдставлСния Π½Π΅ ΠΎ Ρ‡Π΅ΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Π° ΠΎ ядрС систСмы. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ программисты Π»Π΅Π³ΠΊΠΎ приходят ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ язык ΠΈΠ»ΠΈ систСма Π½Π΅ Π² порядкС. Но Ρ‚ΡƒΡ‚ базовая конструкция, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я опирался, - ΠΌΡŒΡŽΡ‚Π΅ΠΊΡ - Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ оказалась сломанной.

Π‘Π΅ΠΉΠ±Π΅Π»: Π˜Ρ‚Π°ΠΊ, ошибка ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»Π°ΡΡŒ Π½Π΅ Π² вашСм ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π²Ρ‹ Ρ‚Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ написали ΡΡ‚ΠΎΠ»ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ тСсты для ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎΠ»Π΅ΠΉ-Π½Π΅Π²ΠΎΠ»Π΅ΠΉ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π²Π½Π΅ Π΅Π³ΠΎ. Как ΠΏΠΎ-Π²Π°ΡˆΠ΅ΠΌΡƒ, ΠΌΠΎΠ³ Π»ΠΈ - ΠΈΠ»ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Π±Ρ‹Π» - Π°Π²Ρ‚ΠΎΡ€ ΠΌΡŒΡŽΡ‚Π΅ΠΊΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСсты для нахоТдСния этой ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π±Π°Π²ΠΈΠ»ΠΈ Π±Ρ‹ вас ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‚ΠΎΡ€Π° нСдСль ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ?

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

Π‘Π΅ΠΉΠ±Π΅Π»: ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ пошаговом ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. А ΠΊΠ°ΠΊΠΈΠΌΠΈ срСдствами ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ сСйчас?

Π‘Π»ΠΎΡ…: НавСрноС, я ΠΊΠ°ΠΆΡƒΡΡŒ Π½Π΅Π°Π½Π΄Π΅Ρ€Ρ‚Π°Π»ΡŒΡ†Π΅ΠΌ, Π½ΠΎ ваТнСйшиС инструмСнты для мСня, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, - ΠΌΠΎΠΈ Π³Π»Π°Π·Π° ΠΈ ΠΌΠΎΠ·Π³. Π― Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Ρ‹Π²Π°ΡŽ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π°ΡŽ.

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ - Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ срСдство, ΠΈ ΠΏΠΎΡ€ΠΎΠΉ ΠΌΠ½Π΅ хочСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ print, Π½ΠΎ вмСсто этого я ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ останова. ВрСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ я ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΈ, Π½ΠΎ ΠΈ Π±Π΅Π· Π½ΠΈΡ… Ρ‡ΡƒΠ²ΡΡ‚Π²ΡƒΡŽ сСбя Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎ. ИмСя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ print ΠΈ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, я Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³Ρƒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ошибки.

Π― ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ утвСрТдСния для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сохранности слоТных ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Если ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π»ΠΎΠΌΠ°ΡŽΡ‚ΡΡ, я Ρ…ΠΎΡ‡Ρƒ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° это ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ дСйствия ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ этому.

ΠšΡΡ‚Π°Ρ‚ΠΈ, я вспомнил Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠ½Π°Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΡ€Π°Π²Π΄Π°, Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ, Π±Ρ‹Π»ΠΎ это Π² Transarc ΠΈΠ»ΠΈ Π½Π° послСднСм курсС УнивСрситСта ΠšΠ°Ρ€Π½Π΅Π³ΠΈ-МСллона, ΠΊΠΎΠ³Π΄Π° я Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π°Π΄ систСмой распрСдСлСнных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Camelot. He я нашСл эту ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ сам случай мСня Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΏΠΎΡ€Π°Π·ΠΈΠ».

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

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