170 похожих чатов

Использовать неблокирующиеся сокеты, работая с ними в рамках одного треда.

Дополнительные треды использовать не допускается. Соответственно, никаких блокирующихся вызовов (кроме вызова селектора) не допускается.

С такой формулировкой как думаете можно использовать горутины для хэндла tcp запросов?

28 ответов

27 просмотров
Дурачок-Глупый Автор вопроса

for { conn, err := listener.Accept() go handleConnection(conn) } Имею ли я право с таким тз писать так или надо как-то по другому? Если по другому то как

в рамках одного треда? GOMAXPROCS=1

Дурачок-Глупый Автор вопроса
Дурачок Глупый
for { conn, err := listener.Accept() go ha...

мб в go есть условный poll? select вроде похож, но как будто он не подходит

Дурачок Глупый
мб в go есть условный poll? select вроде похож, но...

есть и он встроен в рантайм, используется для всех чтений-записей в сокеты. напрямую работать с ним не надо

Дурачок Глупый
for { conn, err := listener.Accept() go ha...

В принципе можно, но под ДоС'ом оно ляжет по out of memory. Я б поизвращался и сделал, например, канал коннектов, из которых читает заранее известное (или изменяющееся в заданных пределах) количество рутин

Alexey ilving
В принципе можно, но под ДоС'ом оно ляжет по out o...

буферы сокетов в ядре занимают куда больше памяти, чем горутина

Дурачок-Глупый Автор вопроса
Дурачок Глупый
мб в go есть условный poll? select вроде похож, но...

увидел вроде есть poll в постгресе Может он мне подойдет? Делать accept, класть и слушать файловые дескрипторы?

Дурачок Глупый
увидел вроде есть poll в постгресе Может он мне по...

Это какое-то тестовое задание? Если да, то go там явно не подразумевался в качестве языка, на котором будет решение. Потому что почти всегда хватает горутины на соединение. Не хватает, если соединений планируется ну очень много, порядка миллиона. Вот там да, нужно думать над неблокирующим вводом-выводом (для чего есть специальные библиотеки)

Владимир Столяров
Это какое-то тестовое задание? Если да, то go там ...

это немножечко чушь мы все читали ту мейлрушную статью, но не все внимательно, видимо если у вас много (1М+) соединений, и на них ничего не происходит большую часть времени - вы можете что-то наэкономить, сократив количество горутин но если у вас там трафик - горутин придется держать столько, сколько и соединений, потому что чудес не бывает

Дурачок-Глупый Автор вопроса

попадает ли создание горутин под запрет что доп треды использовать не допускается

Дурачок-Глупый Автор вопроса
Roman F
Морально попадает

а как морально починить?

Дурачок Глупый
а как морально починить?

go, так-то, сразу запускает дополнительные треды, больше одного go запускает дополнительные треды для блокирующих сисколов так что - никак

Дурачок-Глупый Автор вопроса

тут вопрос можно ли считать файберы тредами?

Daniel Podolsky
это немножечко чушь мы все читали ту мейлрушную с...

А как они там предлагают экономить? Явно создавать сетевой стек, начиная с еполла, а не использовать встроенный?

Daniel Podolsky
о каких файберах речь?

тех, которыми подразумевались быть горутины, но немного не совсем стали

Дурачок-Глупый Автор вопроса
Павλо 🇺🇦
полл, кстати, так же болеет проблемой 10к

а у него под капотом системный вызов poll?

Дурачок-Глупый Автор вопроса
Павλо 🇺🇦
у кого?

у гошного полла

Дурачок Глупый
у гошного полла

если они не намудрили с неймингом, то теоретически - да

Евгений Омельченко
А как они там предлагают экономить? Явно создавать...

ага и по событиям на epoll запускать горутину для обработки

Daniel Podolsky
это немножечко чушь мы все читали ту мейлрушную с...

это ограничение гошного поллера, пока сокет ожидает ивентов от поллера - его буфер чтения простаивает, ожидают миллион сокетов - миллион буферов простаивают. хотя одновременно прилетят не больше сотни-тысячи ивентов, можно было бы использовать меньшее количество буферов. я как-то на это оптимизировал чтение, но потом в рантайм добавили поддержку splice на копирование из сокета в сокет без буферов в юзерспейсе и это решило эти проблемы

Евгений Омельченко
А как они там предлагают экономить? Явно создавать...

китайцы жгут в этом направлении https://github.com/panjf2000/gnet

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта