Считыватели карт

Драйвер устройства чтения карты довольно прост – он ждет пока через аппарат считывания будет проведена карта и считывает ее идентификатор. И хотя сам драйвер достаточно прост, в его основе лежит дизайн, который радикально отличается от дизайна драйвера запорного механизма двери. Вспомним, что запорный механизм является приемником данных («data sink») – управляющая программа посылает ему команду на выполнение определенного действия. В случае считывателей карт такая структура неприменима (мы не хотим постоянно опрашивать считыватель карт о наличии поступивших данных; мы хотим, чтобы он сам посылал нам данные, когда кто-нибудь воспользуется своей картой).

Драйвер считывателя карт должен быть источником данных («data source») – он должен передавать данные другому приложению по мере их поступления.

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

Проблема масштабирования возникает из-за того, что управляющая программа постоянно опрашивает состояния считывателей карт. Это примерно то же самое, как если бы ваши дети постоянно спрашивали вас во время поездки: «Мы уже приехали?» Вместо этого гораздо лучше было бы (хотя это и маловероятно в реальной жизни) если бы они спросили (один раз!): «Скажите нам, когда мы приедем на место.». Если управляющая програма занимается постоянным опросом устройств, мы тратим впустую процессорное время – т.е. увеличиваем накладные расходы: мы теряем время и на запрос и на получение ответа. К тому же мы не только нагружаем процессор, но и нагружаем сеть, что может привести к перегрузке сети в больших распределенных системах. Если в нашей системе лишь несколько считывателей и опрос ведется раз в секунду – это не такая уж большая проблема. Однако, если мы опрашиваем считаватели чаще, а их число не так уж и мало – следует задуматься над вопросом масштабируемости.

Было бы идеально, если бы считыватель карт передавал нам данные по мере их поступления.

РубрикиFAQ

Добавить комментарий