|
|
|
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
|
|||
|---|---|---|---|
|
#18+
Подкину тему для обсуждения. Возможно, что все тривиально, но когда я недавно решал подобную задачу, пришлось немного почесать репу. До сих пор не уверен, что сделал правильно, поэтому было бы интересно послушать мнения более опытных коллег. Суть в следующем. Есть поток, который принимает данные с сокетов с помощью java.nio.channels.Selector: Код: java 1. 2. 3. 4. 5. 6. 7. Есть многопоточный экзекутор, который выполняет задачи по установке новых коннектов. Несколько коннектов может устанавливаться параллельно. В рамках задачи по установке коннекта производится регистрация SocketChannel в том же самом Selector'е. Задача заключается вот в чем. Как минимум - никогда не блокироваться на вызове channel.register() . Задача максимум - сделать настолько оптимально, насколько это вообще возможно. Под оптимальностью я в данном случае понимаю следующее: (1) минимизировать время регистрации (параллельно могут устанавливаться сотни коннектов) (2) минимизировать интервал между операциями select, так как данные с уже установленных коннектов идут интенсивным равномерным потоком Пункты (1) и (2) одинаково важны, т.е. требуется разумный баланс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:55 |
|
||
|
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
|
|||
|---|---|---|---|
|
#18+
Сразу оговорюсь, что у меня пока получилось решить только задачу минимум и возможно п. 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 16:59 |
|
||
|
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
|
|||
|---|---|---|---|
|
#18+
Ну и естественно все это находится в разных классах, которые друг про друга ничего не знают. Единственное, что у них изначально есть общее - это Selector. Но при этом допускается использовать общую dependency (например, всунуть в конструктор обоим классам еще какой-то класс). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 17:05 |
|
||
|
[NIO/Multithreading] Минимизация времени регистрации в активно используемом селекторе
|
|||
|---|---|---|---|
|
#18+
Andrei T, у тебя есть модульный тест на это дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2017, 22:45 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2122610]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
23ms |
get tp. blocked users: |
1ms |
| others: | 185ms |
| total: | 291ms |

| 0 / 0 |
