BASH: Лучшая архитектура для чтения из двух входных потоков

Простой скрипт здесь:

a) постоянно читает из сокета и сохраняет значения в ассоциативный массив
b) постоянно считывает значения из стандартного ввода и отвечает t / f, если они уже существуют в ассоциативном массиве

a и b - случайные события, никак не связанные.

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

Я обдумываю лучшую стратегию, и возникает несколько идей, но мне интересно, есть ли у кого-нибудь на уме что-нибудь получше:

1) перенаправить ввод из сокета на стандартный ввод в качестве подпроцесса и обрабатывать оба ввода в одном цикле while (размеры данных небольшие, <30 символов, поэтому я предполагаю, что они останутся атомарными?).
2) считывает сокет, затем STDIN с небольшими (0,1?) Значениями тайм-аута при чтении, чтобы имитировать неблокирующий ввод-вывод.
3) ОБНОВЛЕНИЕ: записать данные сокета в файл (на самом деле пусть другой процесс записывает его непосредственно в файл), затем каждый раз, когда поступает запрос, чтобы проверить, существует ли значение, обрабатывайте записи в файле, добавляя их в массив (используйте блокировку файла).

5
задан David Parks 15 July 2011 в 05:04
поделиться