Управление потоком при блокировке очереди и записи SocketChannel
У меня есть блокирующая очередь, в которой пишут несколько авторов. Я хочу поставить механизм управления транзакциями, где не более, скажем, 50 писателей(или около того) могут писать в секунду. Есть ли способ достичь этого?
Edit 1: аналогичное требование предъявляется и к методу записи SocketChannel. То есть позволить n писателям писать в секунду. Значение n изменяется. Мне не нужно беспокоиться об этом.
Еще одно редактирование: я думаю использовать циклический барьер, который я выпущу & сбрасывать каждую секунду. Я иду в правильном направлении?
2 ответа:
Я не думаю, что одного семафора для 50 писателей достаточно.
Что вы могли бы сделать, так это, например, иметь пул билетов и механизм, который их выдает. Размер пула позволит вам определить максимальное количество писателей, а механизм, который их выдает, позволит вам контролировать поток.
По существу, поток будет примерно таким:
- писатель просит билет. Вы можете использовать семафор для блокировки доступа к другим потокам в то время как wrjter получает билет.
- Как только у писателя есть билет, он записывает его в буфер.
- писатель возвращает билет (опять же, вы можете использовать семафор для управления доступом к этому разделу, чтобы в любой момент времени писатель либо запрашивал, либо возвращал билет s).