Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / [NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе / 5 сообщений из 5, страница 1 из 1
05.09.2017, 16:55
    #39515903
Andrei T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
Подкину тему для обсуждения. Возможно, что все тривиально, но когда я недавно решал подобную задачу, пришлось немного почесать репу. До сих пор не уверен, что сделал правильно, поэтому было бы интересно послушать мнения более опытных коллег.

Суть в следующем. Есть поток, который принимает данные с сокетов с помощью java.nio.channels.Selector:
Код: java
1.
2.
3.
4.
5.
6.
7.
Selector selector = Selector.open();
while (true) {
    int n;
    while ((n = selector.select()) == 0)
        ;
    // process selector.selectedKeys()
}



Есть многопоточный экзекутор, который выполняет задачи по установке новых коннектов. Несколько коннектов может устанавливаться параллельно. В рамках задачи по установке коннекта производится регистрация SocketChannel в том же самом Selector'е.

Задача заключается вот в чем. Как минимум - никогда не блокироваться на вызове channel.register() .

Задача максимум - сделать настолько оптимально, насколько это вообще возможно. Под оптимальностью я в данном случае понимаю следующее:
(1) минимизировать время регистрации (параллельно могут устанавливаться сотни коннектов)
(2) минимизировать интервал между операциями select, так как данные с уже установленных коннектов идут интенсивным равномерным потоком
Пункты (1) и (2) одинаково важны, т.е. требуется разумный баланс.
...
Рейтинг: 0 / 0
05.09.2017, 16:59
    #39515907
Andrei T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
Сразу оговорюсь, что у меня пока получилось решить только задачу минимум и возможно п. 1
...
Рейтинг: 0 / 0
05.09.2017, 17:05
    #39515911
Andrei T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
Ну и естественно все это находится в разных классах, которые друг про друга ничего не знают. Единственное, что у них изначально есть общее - это Selector. Но при этом допускается использовать общую dependency (например, всунуть в конструктор обоим классам еще какой-то класс).
...
Рейтинг: 0 / 0
05.09.2017, 22:45
    #39516044
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
Andrei T, у тебя есть модульный тест на это дело?
...
Рейтинг: 0 / 0
07.09.2017, 10:11
    #39517031
Andrei T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
maytonAndrei T, у тебя есть модульный тест на это дело?
Именно модульного нет. Есть интеграционные на все вместе. Ну и профилирование, конечно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / [NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]