Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: Тёмчик Австралия жж
Дата: 08.02.22 08:05
Оценка:
Здравствуйте, vsb, Вы писали:

Тё>>Библиотека копирует буфер!


vsb>Да ладно. Даже на жаве netty ничего не копирует зазря, а напротив там куча приседаний, лишь бы не скопировать нечаянно.


Зато может, выделяет из кучи под новый буфер каждый раз- а значит, жрет и тормозит на GC.
Re[6]: Тестовое задание: написать эффективный TCP-сервер
От: vsb Казахстан  
Дата: 08.02.22 08:22
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Здравствуйте, vsb, Вы писали:


Тё>>>Библиотека копирует буфер!


vsb>>Да ладно. Даже на жаве netty ничего не копирует зазря, а напротив там куча приседаний, лишь бы не скопировать нечаянно.


Тё>Зато может, выделяет из кучи под новый буфер каждый раз- а значит, жрет и тормозит на GC.


Нет, там пул буферов.
Re[4]: Тестовое задание: написать эффективный TCP-сервер
От: alexander_r  
Дата: 08.02.22 11:00
Оценка:
Здравствуйте, vsb, Вы писали:
vsb>Я не считаю, что написание эффективного hello world сервера это работа, которая чего-либо стоит в плане пользы. Вполне себе хорошее тестовое задание. И вполне себе бесполезный на практике код (т.к. любой адекватный проект будет использовать готовую библиотеку, а не велосипед).
Задача может быть и не плохая, просто эффективность нужно мерить в цифрах, иначе это не серьезно
если бы было сравнение работы реализации эталонной и кандидата, тогда можно о чем то судить, а просто смотреть код и рассуждать об эффективности, не думаю что это правильно
Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: alexander_r  
Дата: 08.02.22 11:13
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Просто сама постановка вопроса. Вот, для примера, образцовая реализация TCP-сервера из книги: http://www.khmere.com/freebsd_book/src/06/poll_socket.c.html

S>Ну или что-то подобное можно найти открытое, которое уже реализовали 300 раз и пытались оптимизировать лучшие умы человечества.
S>Неужели вы, простой Вася из Урюпинска, сможете написать что-то более эффективное?

Хорошо было бы увидеть истинно эффективную реализацию сервера от этой конторы, что бы было с чем сравнивать
Мне кажется правильно сказал reversecode про "завышенное чсв свиньёров"...
Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: удусекшл  
Дата: 08.02.22 11:37
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Неужели вы, простой Вася из Урюпинска, сможете написать что-то более эффективное?


Более эффективное — нет, не буду и стараться. И я не Вася, и не из Урюпинска
Re[2]: Тестовое задание: написать эффективный TCP-сервер
От: удусекшл  
Дата: 08.02.22 11:39
Оценка:
Здравствуйте, Тёмчик, Вы писали:

Тё>Взять готовую библиотеку. Но это же про C++, правда? Там у них своя атмосфэра.


Кто о чем, а Тёмчик — про ресепшиониста
Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: Pitirimov Россия  
Дата: 08.02.22 12:06
Оценка: 1 (1) :))
Здравствуйте, Shmj, Вы писали:
S>Просто сама постановка вопроса. Вот, для примера, образцовая реализация TCP-сервера из книги: http://www.khmere.com/freebsd_book/src/06/poll_socket.c.html
S>Ну или что-то подобное можно найти открытое, которое уже реализовали 300 раз и пытались оптимизировать лучшие умы человечества.
S>Неужели вы, простой Вася из Урюпинска, сможете написать что-то более эффективное?

Образцовый сервер из книги писал лохопед и вот почему: если хотя бы в одном из входящих соединений со стороны пользователя начнут принимать данные очень медленно, скажем, по байту в секунду, то запросы других пользователей к серверу будут ждать обработки очень и очень долго.
Грамотный инженер слушал бы все запросы в главном потоке, а обработку каждого запроса делал бы во вновь создаваемом потоке. Таким образом, обработка каждого запроса пользователя станет независимой. После обработки запроса поток можно спокойно удалять.
Второе: в книжном сервере загружено лишь одно ядро процессора да и то кэш этого ядра процессора будет постоянно вымываться из-за смены порядка обработки запросов к серверу от разных пользователей. В нашем случае, все ядра процессора будут загружены работой из-за независимой, многопоточной обработки запросов и кэши каждого из ядер процессора не будут вымываться, потому что каждое ядро процессора будет обрабатывать свой поток с нужными только этому потоку данными.
Re[6]: Тестовое задание: написать эффективный TCP-сервер
От: scf  
Дата: 08.02.22 13:23
Оценка: +1
Здравствуйте, Pitirimov, Вы писали:

P>После обработки запроса поток можно спокойно удалять.


У меня было четкое понимание, что создание потока — это дорого и поэтому придумали тредпулы. Я отстал от жизни?
Re[2]: Тестовое задание: написать эффективный TCP-сервер
От: ksandro Мухосранск  
Дата: 08.02.22 14:31
Оценка: 2 (1) +1
Здравствуйте, Gradiens, Вы писали:


G>В 22 году любое тестовое задание звучит как бред. Возможно, ради вот прямо компании мечты можно сделать исключение, но если это просто очередная компания из списка — зачем тратить свое время? Не лучше ли за это время пройти пару-тройку собеседований в более адекватных компаниях?


А вот мне скорее нравится, когда тестовые задания дают на дом. По крайней мере у меня с ними обычно не возникает больших проблем.
Как правило в этом случае есть довольно много времени на решение. Обычно, когда я получаю такое задание, я сначала внимательно читаю его, чтоб понять что к чему, потом забиваю и оставляю на следующий день. Обычно сутра я уже прекрасно понимаю, как я буду делать задание в голове есть не только решение, но архитектура(разбивка на классы).
Вообще на работе я часто поступаю примерно так же, если не ясно, как делать ту или иную задачу, я делаю перерыв, иду попить кофе, пообедать, вот форум могу почитать, или вообще забить до следующего дня. После перерыва в мозгу как правило появляется понимание.
Со стороны конторы, плюс тестового задания в отсеивании кандидатов, которые просто так ходят по собеседованиям от нечего делать.

Но сейчас мода поменялась, сейчас почти все серьезные да и несерьезные работодатели берут пример с Гугла и заставляют решать тебя алгоритмические задачи непосредственно на собеседовании. Так уж получилось, что я никогда не занимался спортивным программированием и не участвовал в олимпиадах, а на работе навык быстрого решения алгоритмичесмких задачь не прокачивается совсем.
В итоге, на таких собеседованиях я либо мгновенно понимаю как решать задачу (что бывает не часто), либо мой мозг говорит, "сделай перерыв", отказывается что-то решать, и вообще не хочет думать, в этом случае я начинаю выглядить перед интервьюерами (да и сам перед собой) полным дебилом.
Учитывая современные тенденции, ИМХО мне все-таки придется научиться решать задачи на скорость если я планирую еще поработать, потому, что скоро на такой метод собеседований перейдут вообще все. Проблема в том, что мне очень скучно просто так сидеть и прорешивать задачи уж лучше тестовые задания


G>А уж эффективный сервер написать... а операционку им написать не надо?


Вообще, для человека, постоянно работающего с сетью, написать tcp сервер — это не сложная задача, но вот под словами "эффективный" можно могут скрываться совершенно разные вещи. Тут сложно что-то сказать не видя кода этого самого сервера, может быть там какие-то совершенно банальные студенческие ошибки, может быть он с сетью никогда не работал.
Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: reversecode google
Дата: 08.02.22 14:38
Оценка: 10 (1)
просто вася из урюпинска может написать более эффективный nginx
да и всегда мог написать
почему не писал или не напишет сейчас
это уже тема прям отдельного большого бесконечного топика
Re[2]: Тестовое задание: написать эффективный TCP-сервер
От: reversecode google
Дата: 08.02.22 14:42
Оценка:
нет эффективной готовой библиотеки для С или С++
даже asio для студентов, можете ее автору так и сказать
Re[3]: Тестовое задание: написать эффективный TCP-сервер
От: Gradiens  
Дата: 08.02.22 15:23
Оценка: +2
Здравствуйте, ksandro, Вы писали:

K>А вот мне скорее нравится, когда тестовые задания дают на дом. По крайней мере у меня с ними обычно не возникает больших проблем.

Нет, ну если ты решаешь "для себя", в целях самообучения, тренировки и т.д -почему бы и нет.
Но если ты решаешь только для того, чтобы тебя допустили до интервьювера — хм, это сомнительная инвестиция времени.

K>Со стороны конторы, плюс тестового задания в отсеивании кандидатов, которые просто так ходят по собеседованиям от нечего делать.

Также отсеют тех, кто ценит свое время.
А вот тех, кто попросит сделать задание друга — наоборот, привлекут.

Ну бог с ними, с конторами. Мы же, как кандидаты, должны думать о себе.
Зачем делать задание, если можно просто пойти на собеседование без заданий?

K>Но сейчас мода поменялась, сейчас почти все серьезные да и несерьезные работодатели берут пример с Гугла и заставляют решать тебя алгоритмические задачи непосредственно на собеседовании.

Ты пропустил следующее изменение моды. Компании, в исступлении копирующие Гугл, то и дело совершают каминг-ауты с и констатируют неэффективность таких методов.

И, тут у меня закралось сомнение, а в какой стране ты ищешь работу? Ну то есть в РФ уже лет наверное 10 тестовые задания стали скорее исключениями.

K>Так уж получилось, что я никогда не занимался спортивным программированием и не участвовал в олимпиадах, а на работе навык быстрого решения алгоритмичесмких задачь не прокачивается совсем.

Ну даже не знаю, у меня пару лет назад был забег по собеседованиям, и даже тогда, на пике hiring freeze, только 1 из 30 компаний предлагала задание. И еще две — решать алгоритмические задачки.
С тех пор периодически пингую рынок, и сейчас, на фоне взрывной нехватки айтишников, ни разу не встретил требование решить ТЗ ни алгоритмических задач.
Ну да, наверное, я просто не пробовал устроится в Яндекс ))

K>Вообще, для человека, постоянно работающего с сетью, написать tcp сервер — это не сложная задача, но вот под словами "эффективный" можно могут скрываться совершенно разные вещи. Тут сложно что-то сказать не видя кода этого самого сервера, может быть там какие-то совершенно банальные студенческие ошибки, может быть он с сетью никогда не работал.

Да это вообще плевок в кандидата.
Настолько неконкретные требования.
И как я понимаю, задавать уточняющие вопросы через HR весьма тяжело.

Еще раз.
Надо уважать свое время.
Уважать себя.
Если сам себя не уважаешь — почему работодатель это будет делать?
И у айтишников есть объективные причины проявлять жесткость на переговорах.
Вот, за прошлый год стоимость найма подросла процентов 25. В этом году (если верить аналитическим агентствам, которым платит моя контора за доступ к исследованиям) вообще до 40% дойдет
Re[4]: Тестовое задание: написать эффективный TCP-сервер
От: Mr.Delphist  
Дата: 08.02.22 15:59
Оценка:
Здравствуйте, Тёмчик, Вы писали:

KP>>Ну вообще взять готовую библиотеку — это современный C++ путь. Но могут быть и исключения


Тё>Библиотека копирует буфер!


Нет. Написано ж выше: библиотека может выбросить исключение!
Re[4]: Тестовое задание: написать эффективный TCP-сервер
От: ksandro Мухосранск  
Дата: 08.02.22 16:11
Оценка:
Здравствуйте, Gradiens, Вы писали:

G>Здравствуйте, ksandro, Вы писали:


G>Нет, ну если ты решаешь "для себя", в целях самообучения, тренировки и т.д -почему бы и нет.

G>Но если ты решаешь только для того, чтобы тебя допустили до интервьювера — хм, это сомнительная инвестиция времени.

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


G>Также отсеют тех, кто ценит свое время.

G>А вот тех, кто попросит сделать задание друга — наоборот, привлекут.

Да, что отсеят тех кто ценит свое время, я согласен.
Ну, тех кто просит сделать друга на собеседовании вычислить не так уж сложно.

G>Ну бог с ними, с конторами. Мы же, как кандидаты, должны думать о себе.

G>Зачем делать задание, если можно просто пойти на собеседование без заданий?

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

G>Ты пропустил следующее изменение моды. Компании, в исступлении копирующие Гугл, то и дело совершают каминг-ауты с и констатируют неэффективность таких методов.

Ну вообще это логично, если человек может пойти в гугл, он и пойдет в Гугл, но про камминг-ауты было бы интересно почитать.
Ну вот не знаю, меня где-то на 70% собеседований заставляют решать алгоритмические задачи, где-то совсем простые, где-то непростые, но почему-то везде заставляют...

G>И, тут у меня закралось сомнение, а в какой стране ты ищешь работу? Ну то есть в РФ уже лет наверное 10 тестовые задания стали скорее исключениями.


По большей части в РФ, и если пишут иностранные рекрутеры, тоже бывает отвечаю, сейчас это не так интересно, раньше до ковида можно было нахаляву скататься в Европу на собеседование... сейчас это уже как-то не практикуют.
Ты не очень понял что я написал, сейчас везде алгоритмические задачи и кодинг непосредственно на собеседовании, и это у меня плохо получается, раньше тестовые задания встречались чаще и с ними у меня процент прохождения собеседований был намного выше.
Но вообще и задания на дом иногда встречаются.

G>Ну даже не знаю, у меня пару лет назад был забег по собеседованиям, и даже тогда, на пике hiring freeze, только 1 из 30 компаний предлагала задание. И еще две — решать алгоритмические задачки.

G>С тех пор периодически пингую рынок, и сейчас, на фоне взрывной нехватки айтишников, ни разу не встретил требование решить ТЗ ни алгоритмических задач.
G>Ну да, наверное, я просто не пробовал устроится в Яндекс ))

Возможно я просто хожу на собеседования, где предлагают выше рынка, там встречаются и задачи и тестовые задания (чаще задачи). Хотя может раньше я ходил по всем подряд и поэтому результаты были лучше

G>Да это вообще плевок в кандидата.

G>Настолько неконкретные требования.
G>И как я понимаю, задавать уточняющие вопросы через HR весьма тяжело.

Ну, мы ж не знаем, как там в реальности была сформулирована задача, я бы воздержался от громких фраз типа "плевок". Мы не видели ни полный текст задания ни код, который отправил кандидат.

G>Еще раз.

G>Надо уважать свое время.
G>Уважать себя.
G>Если сам себя не уважаешь — почему работодатель это будет делать?
G>И у айтишников есть объективные причины проявлять жесткость на переговорах.
G>Вот, за прошлый год стоимость найма подросла процентов 25. В этом году (если верить аналитическим агентствам, которым платит моя контора за доступ к исследованиям) вообще до 40% дойдет

Да это все понятно, я просто говорю, что лично мне с тестовое задание нравится больше чем онлайн кодинг алгоритмических задач.
А если хочешь выше рынка, то как правило приходится соглашаться на правила собеседований от работодателя.
Re[7]: Тестовое задание: написать эффективный TCP-сервер
От: Pitirimov Россия  
Дата: 08.02.22 16:59
Оценка: -2
Здравствуйте, scf, Вы писали:
scf>У меня было четкое понимание, что создание потока — это дорого и поэтому придумали тредпулы.

Можешь попробовать открыть мою домашнюю страницу и оценить в деле насколько дорого выходит создание и уничтожение нового потока на каждый запрос пользователя.
Re[3]: Тестовое задание: написать эффективный TCP-сервер
От: Denwer Россия  
Дата: 09.02.22 08:26
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Ок, приведите тут ваш "эффективный TCP-сервер".


Нет универсального эффективного сервера, есть эффективный сервер под конкретные задачи. В том числе верно спроектированный/выбранный протокол. Кстати, очень часто вижу как в таких серверах вызываются функции на выделение и удаление памяти, причем в тех местах, где просто просится буффер на коннект или же просто смена алгоритма позволяет избежать вообще выделение памяти.
Re[3]: Тестовое задание: написать эффективный TCP-сервер
От: Denwer Россия  
Дата: 09.02.22 08:56
Оценка:
Здравствуйте, reversecode, Вы писали:

R>нет эффективной готовой библиотеки для С или С++

R>даже asio для студентов, можете ее автору так и сказать

Ну я использовал АСИО в своих проектах, держала нагрузку очень хорошо. Я даже не помню что бы там процессор был загружен при нескольких тысячах коннектов.
Re[4]: Тестовое задание: написать эффективный TCP-сервер
От: reversecode google
Дата: 09.02.22 09:36
Оценка: :))
если вы не знаете как устроен asio и вообще не знаете как проектируются такого рода "реакторы" так сказать
так понятно что вам и так сойдет
Re[8]: Тестовое задание: написать эффективный TCP-сервер
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.02.22 10:15
Оценка: +1
Здравствуйте, Pitirimov, Вы писали:

P>Можешь попробовать открыть мою домашнюю страницу и оценить в деле насколько дорого выходит создание и уничтожение нового потока на каждый запрос пользователя.


Что там можно увидеть? Пустая страничка с бекграунд фото какой то музыкальной системы.
Re[5]: Тестовое задание: написать эффективный TCP-сервер
От: serj.e  
Дата: 09.02.22 19:27
Оценка:
S>Неужели вы, простой Вася из Урюпинска, сможете написать что-то более эффективное?
Что-то имеете против простых "Вась из Урюпинска"? Напомню, у простого Игоря из Алма-Аты, в свободное от работы сисадмином время, получилось — значит и у Васи может получиться.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.