Есть пул тредов все они работают ассинхронно получая данные от одного треда (INPUT) и отдавая данные другому (OUTPUT). Вопрос: как вы считаете лучше организовать I/O ? Приходят в голову два варианта:
1) INPUT перебирает в цикле все треды пока не найдет свободный, дает ему данные и активизирует его. Так же в цикле опрашивает все треды OUTPUT, находит отработавший, забирает данные и деактивизирует его.
2) Тред отработав блокирует очередь "готовых отдать данные тредов", добавлет туда себя, разюлокирует очередь и засыпает. OUTPUT блокирует ту же очередь, достает информацию, разблокирует очередь, блокирует очередь "готовых принять данные тредов", добавляет туда информацию об этом треде и разблокирует очередь. INPUT блокирует эту очередь, достает от туда информацию о свободном треде, разблокирует очередь, передает данные треду и активизирует его.
Что лучше ? Во-втором случае информация о конкретном свободном треде но сплошные блокировки, в первом случае отсутствие блокировок но тупой перебор все тредов...
Что будет быстрее работать ???