В последнее время я работаю с основными понятиями параллелизма в программировании. Одна мысль, которая пришла мне в голову, была одновременным вводом с клавиатуры. В программировании метод или функция вызывается через прослушиватель событий, который одновременно выполняет только одно нажатие клавиши. Программист должен запрограммировать код определенным образом для одновременного / многократного нажатия клавиш. Мне интересно, как аппаратно обрабатывает «по-настоящему одновременный» ввод. Существует ли какой-то механизм, который автоматически расставляет приоритеты для воспринимаемых входов в определенном порядке?

2 ответа2

0

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

0

Принимая ваш конкретный вопрос о вводе с клавиатуры. Компьютер получает нажатия клавиш по последовательному каналу связи, поэтому нажатие клавиши не принимаются одновременно , как они должны быть - эр - последовательный.

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

Действительно возможно, что благодаря этому сканированию прессы могут быть очень близко друг к другу, но второе видно первым.

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

Прилично написанное управляемое событиями программное обеспечение должно учитывать тот факт, что два события могут быть обнаружены очень близко друг к другу и фактически могут быть просмотрены в обратной последовательности.

Другие ошибки секвенирования можно найти в случаях, когда процессоры ввода-вывода сообщают компьютеру контроллера с протоколом, который эффективно агрегирует входные данные.

Таким образом, действительно ли может быть достигнут одновременный ввод - нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .