Подтвердить что ты не робот

Что означает STDOUT.sync = true?

Я читаю исходный код для платформы мониторинга процесса god в Ruby и обнаружил, что STDOUT.sync = true. Я никогда не видел ничего подобного раньше.

Пожалуйста, объясните, что он делает, в чем смысл этой линии?

Заранее спасибо.

4b9b3361

Ответ 1

Обычно puts не записывается непосредственно в STDOUT, но буферизирует строки внутри и записывает вывод в более крупные фрагменты. Это делается потому, что операции ввода-вывода выполняются медленно, и, как правило, имеет смысл избегать непосредственной записи каждого отдельного символа на консоль.

Такое поведение приводит к проблемам в определенных ситуациях. Представьте, что вы хотите создать индикатор выполнения (запустите цикл, который выводит одиночные точки между большими вычислениями). При буферизации результат может заключаться в том, что на какое-то время нет какого-либо вывода, а затем сразу сразу выводятся несколько точек.

Чтобы избежать этого поведения и вместо этого немедленно записать в STDOUT, вы можете установить STDOUT в режим синхронизации следующим образом:

STDOUT.sync = true

Из docs:

Когда режим синхронизации имеет значение true, все выходные данные немедленно очищаются от базовой операционной системы и не буферизируются внутри.