Каква е ползата от използването на netty4 NIO от страната на клиента в сравнение с IO, блокиращ една нишка на връзка?

Виждам от страна на сървъра, че предимството на NIO е възможността за управление на множество мрежови връзки с по-малко нишки в сравнение с една нишка на връзка, блокираща IO.

Ако обаче имам IO клиент, който се свързва към хиляди сървъри едновременно, мога ли просто да имам подобен подход за управление на тези връзки IO, използвайки по-малко нишки. Опитах подхода в Netty 4 множествен клиент и открих, че създава „Четец " нишка за всеки създаден канал.

И така, въпросите ми са:

1) какви са ползите от използването на netty/NIO от страната на клиента? 2) възможно ли е да управлявате множество връзки с по-малко нишки от страната на клиента?

Благодаря!

Качих примерите на код в github: https://github.com/hippoz/ogop-lseb

Примерният клас сървър/клиент е moc.ogop.ahsp.demo.nio.MultipleConnectionNioMain и moc.ogop.ahsp.demo.nio.NettyNioServerMain


person James Zheng    schedule 19.07.2016    source източник
comment
Няма, освен ако не планирате да имате голям брой изходящи връзки, което не е обичайно.   -  person user207421    schedule 19.07.2016
comment
да, всъщност ние използваме постоянна връзка между всеки клиент/сървър. така че всеки клиент може евентуално да се свърже към около 1000 сървъра едновременно.   -  person James Zheng    schedule 19.07.2016
comment
Е, в такъв случай (което не следва от „постоянна връзка“), можете да запазите нишки за сметка на значително по-сложно кодиране. Първо бих го накарал да работи с java.net и след това да видя дали имате проблем с мащабируемостта.   -  person user207421    schedule 20.07.2016
comment
Дори аз имам същия въпрос в съзнанието си, но все още не съм получил отговор? моля, споделете, ако сте получили отговора си   -  person Sachin Sachdeva    schedule 18.03.2017


Отговори (1)


Наличието на много нишки създава проблем с превключването на контекста в ядрото, където много повече памет се зарежда и разтоварва от всяко ядро, докато ядрото се опитва да разпредели нишките между ядрата.

Предимството на NIO навсякъде е производителността. Това е почти единствената причина да го използваме. Използването на Blocking IO е МНОГО по-лесно. С помощта на работния модел и NIO можете да ограничите броя на нишките (и потенциалното изчислително време), използвани от процеса. Така че, ако имате двама работници и те се побъркат, използвайки 100% време на процесора, цялата система няма да премине към обхождане, защото имате налични още 2-4 ядра.

Забавлявай се!

person Johnny V    schedule 06.08.2016