Книга: Программирование на языке Ruby
13.2.8. Продолжение обработки во время ввода/вывода
13.2.8. Продолжение обработки во время ввода/вывода
Часто приложению приходится выполнять одну или более длительных операций ввода/вывода. Прежде всего, речь идет о вводе данных с клавиатуры, поскольку человек печатает куда медленнее, чем вращается диск. Это время можно употребить на пользу с помощью потоков.
Возьмем, к примеру, шахматную программу, которая должна ждать, пока человек сделает ход. Конечно, мы можем изложить только сам принцип, не вдаваясь в технические детали.
Предположим, что итератор predict_move
генерирует вероятные ходы человека (и ответные ходы программы). Тогда в момент, когда человек сделает ход, не исключено, что у компьютера уже будет готов ответ.
scenario = {} # Хэш ход-ответ.
humans_turn = true
thinking_ahead = Thread.new(board) do
predict_move do |m|
scenario[m] = my_response(board,m)
Thread.exit if humans_turn == false
end
end
human_move = get_human_move(board)
humans_turn = false # Остановить поток.
# Теперь можно посмотреть, нет ли в хэше scenario хода,
# сделанного пользователем...
Конечно, настоящие шахматные программы работают не так.
- 13.2.1. Синхронизация с помощью критических секций
- 13.2.2. Синхронизация доступа к ресурсам (mutex.rb)
- 13.2.3. Предопределенные классы синхронизированных очередей
- 13.2.4. Условные переменные
- 13.2.5. Другие способы синхронизации
- 13.2.6. Тайм-аут при выполнении операций
- 13.2.7. Ожидание события
- 13.2.8. Продолжение обработки во время ввода/вывода
- 13.2.9. Реализация параллельных итераторов
- 13.2.10. Параллельное рекурсивное удаление
- 13.2.8. Продолжение обработки во время ввода
- Улучшенное время отклика для версии SuperServer
- Часы в Windows показывают неправильное время
- Продолжение линии 1.0
- 1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации
- Глава 7. Дата и время
- Глава 18 Время
- 1.4.1. Кодирование во время выполнения
- Время и дата
- 1.6 Драйверы и буферы ввода-вывода
- Методы грамотной обработки возражений изменению
- Время