ГлавнаяНаукаВсе новости раздела
 

9 сентября в интернете будет штормить

Корреспондент.net, 8 сентября 2001, 15:41
0
3

Рано утром 9 сентября в Unix-системах отсчет времени перевалит за миллиардную секунду. Некоторые СМИ уже назвали этот перевальный пункт "проблемой-2001". И даже специалисты расходятся во мнении о том, насколько эта проблема серьезна.

Как заявил Алексей Выскубов, работающий в исследовательском центре Nokia в Финляндии, проблема является "шуточной". Время в Unix-системах отсчитывается от так называемого Epoch: 00:00 01.01.1970. При этом время считается в секундах, а под счетчик в большинстве систем выделено 4 байта. В байте 8 бит, так что переполнение произойдет, когда число достигнет "2 в степени 32" (то есть на 4294967296-ой секунде), а не в случае "10 в степени 9" (то есть на миллиардной), сообщает «Нетоскоп».

"С точки зрения компьютеров число 10 в степени 9 ничем не замечательно", - полагает Алексей Выскубов. Он также рассказал, что новость об этой очередной "ошибке-2000" в качестве шутки запущена в СМИ научным руководителем одного его знакомого, вычислившим эту миллиардную секунду.

Между тем, по данным "Нетоскопа", уже в пятницу некоторые веб-серверы стали испытывать сбои, связанные с "миллиардной секундой". Например, сбои, случившиеся в работе сайта Lenta.ru, выразились в неправильной работе некоторых программ сортировки новостей. И связана эта проблема вовсе не с переполнением счетчика. Вот как комментирует ситуацию программист Максим Мошков:

"Как известно, дата хранится в виде числа секунд, прошедших с 1970-го года. Например, сейчас это 999867871. А послезавтра это число перевалит за 1000000000 и в нем добавится еще один разряд. Ничего криминального в этом нет, но у программистов на Perl в связи с этим может возникнуть неприятность в операциях сравнения времен (например - времени модификации файлов, или даты постинга)".

По мнению Мошкова, ошибка может случиться, например, если в программе стоит списанная с учебника типовая операция сортировки массива по дате:

@FILES=sort{ $FILEtime{$b} cmp $FILEtime{$a}} (@FILES);

В данном определении используется "cmp" - операция символьного сравнения, а не числового. А в символьном сравнении 1000000000 меньше, чем 999867871. Поэтому при такой сортировке результат окажется прямо противоположным ожидаемому.

Естественно, если программист с самого начала использовал корректную сортировку (не "cmp", a "<=>"), то ничего не случится. Но кто может поручиться, что во всех его скриптах повсюду использованы корректные виды сравнений и сортировок?

Как полагает Мошков, проблема является вполне реальной с учетом того, что многие скрипты писались в пору обучения языку Perl, когда разница между "cmp" и "<=>" была просто неизвестна авторам этих скриптов. А многие веб-мастера вообще используют чужие скрипты, сгруженные из Интернета. Поэтому "глюки ожидают нас всех в самых неожиданных местах".

Таким образом, у интернетчиков остались еще сутки для того, чтобы почистить код и встретить 1000000000-ю секунду от 1-го января 1970-го года во всеоружии.

Кроме того, как сообщают некоторые источники, еще ряд проблем 9 сентября может быть связан с тем, что юниксоидно-настроенные системные администраторы будут активно праздновать "миллиардную секунду" с применением алкоголя.

Если вы заметили ошибку, выделите необходимый текст и нажмите Ctrl+Enter, чтобы сообщить об этом редакции.
powered by lun.ua

ЧИТАЙТЕ ТАКЖЕ

Loading...

Корреспондент.net в cоцсетях