LINUX.ORG.RU

Руководство поручило вместо boost::asio использовать Qt

 , ,


0

6

Привет всем!

Подрабатываю в одной конторе - «почтовом ящике». Вчера потребовали в разработке для многопоточного I/O больше не использовать boost::asio, а вместо него всё сетевое писать на Qt.

Често-говоря, вступать в холивары не хотелось. На вопрос «а как же epoll()» был получен ответ, что «QDataStream его поддерживает», далее решил перестать дискутировать.

Что посоветуете? :) Благодарю!


А в чём именно тебе нужен совет? Просто бери и переписывай. В простых случаях там всё тривиально.

Deleted
()

Очевидно - глянуть в сорцы/доку. Если оратор не прав - прилюдно его унизить с пруфами и особым цинизмом. Иначе - харасмент.

Компромисный вариант - перейти на пайтон.

pon4ik
()

Классы Qt очень приятны. Но не собираются ли Qt-шники отказываться от своих классов в пользу boost/stl, или даже к сигналам слотам из boost? Чето я такое слышал, может это была новость 1 апреля

Но это в будущем, а сейчас классы Qt есть, и они прекрасны. Юзай, сын мой, советую так и поступить

I-Love-Microsoft 👍👍👍👍
()
Ответ на: комментарий от I-Love-Microsoft

Раньше тоже так думал. Вот архитектурно - Qt местами торт. Но api там вырвиглазное, слишком джавовое что-ли. Взять QList с operator [] и реализацией на векторе.

pon4ik
()
Ответ на: комментарий от pon4ik

Но api там вырвиглазное, слишком джавовое что-ли.

Вкусовщина или есть конкретные примеры? C++ std в миллионы раз хуже. Я молчу про буст.

RazrFalcon
()

Мне казалось QtNetwork и boost::asio в разных весовых категориях. Qt намного удобнее, но доступ к внутренностям закрыт.

RazrFalcon
()
Ответ на: комментарий от pon4ik

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

anonymous
()
Ответ на: комментарий от RazrFalcon

C++ std в миллионы раз хуже. Я молчу про буст.

Лол, а парни то и не знали :)

Вкусовщина или есть конкретные примеры?

Вкусовщина, многобукав, инопланетно, нет исключений. Poco и Qt - всегда вызывают отторжение, хотя были проекты куда я их сам притаскивал по первости, ибо начинал с Qt и тоже какое то время испытывал щенячий восторг. Потом посмотрел в сорцы, пописал на альтернативах (не gui, в плане gui практически безальтернативно, особенно если нужно быстро), и пиетет ощутимо понизился.

pon4ik
()
Ответ на: комментарий от RazrFalcon

Qt - для написания UI в первую очредь, всё остальное там по остаточному принципу, достаточно что бы на уровне прототипа или простых случаев не тащить другие зависимости. И это грамотно.

Но если речь идёт уже об отсутсвии/наличии epoll то я бы просто сравнил бы io_service::run и QEventLoop::run, поплевался бы и взял буст.

pon4ik
()
Ответ на: комментарий от pon4ik

Вкусовщина, многобукав, инопланетно, нет исключений...

В целом согласен. В данном случае не покидает ощущение использования инструмента не по назначению... GUI toolkit - это одно, а epoll-based asynchonous event loop for I/O programming - это совершенно другое. Но, видимо, надо смириться... :)

illy
() автор топика
Ответ на: комментарий от ncuxer

Я его и не использую. Но сам Qt на него завязан. Ничего не поделаешь.

RazrFalcon
()
Ответ на: комментарий от pon4ik

Qt - для написания UI в первую очредь, всё остальное там по остаточному принципу

Хоть и недолюбливаю Qt, но это уж толсто.

// Пишу проект, процентов 5 кода с Qt это гуй, остальное - Core, Network, WebEngine. Идет нормально.

anonymous
()
Ответ на: комментарий от anonymous

// Пишу проект, процентов 5 кода с Qt это гуй, остальное - Core, Network, WebEngine. Идет нормально.

Если не секрет, то как оно в проде себя ведёт? Держит ли нагрузку? Грузит ли все головы всех процов при этом? Можно ли сетевое решение не Qt так же легко скэйлить по кол-во thread-ов, как сделанное на `asio::io_service` - просто добавив thread-ов и вызвав в них `io_service::run()`?

illy
() автор топика

Для «почтового ящика» естественно желание максимально упрощать код. Я бы тоже буст не пропускал, если Qt хватает. Кто после тебя сопровождать будет? Видел я, какие кадры в таких конторах.

anonymous
()
Ответ на: комментарий от anonymous

Для «почтового ящика» естественно желание максимально упрощать код. Я бы тоже буст не пропускал, если Qt хватает. Кто после тебя сопровождать будет? Видел я, какие кадры в таких конторах.

Согласен! Это было разумным аргументом руководства. Я сам не уверен, поэтому и спрашиваю... Разумом всё понимаю, но «сердцем» - нет. Да и не сильно там в этом boost::asio и много чего этакого - день на изучение да игрища с примерами и можно кодить, если «по чесноку»...

И ещё возникает мысль: Может пришла пора заняться кадрами, а не идти на такие компромиссы, делая «закладки на будущее»? Вот и пусть люди обучаются разным технологиям - на практике лучше всего познание идёт...

illy
() автор топика
Последнее исправление: illy (всего исправлений: 1)
Ответ на: комментарий от illy

Нет, за нагрузки не скажу. На Qt у нас очень легкий сетевой обмен, тяжелый вынесен на webrtc.

anonymous
()

А что советовать. QTcpSocket и вперед.

rumgot 👍👍👍
()
Ответ на: комментарий от anonymous

Ключевое словом тут webengine, в этой теме я плаваю, но вроде альтернатив Qt тут не так уж и много и их реализация прибита гвоздями.

pon4ik
()
Ответ на: комментарий от illy

Начать надо да, с требований. Если они есть, особенно нефункциональные то исходить строго из них. Если 99% это ui и надо 3 файла раз в три года принять по сети, то делать асинхронную кракозябру на пустом месте смысла не имеет.

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

pon4ik
()

для многопоточного I/O

во-первых, а имеется ли реальная потребность в epoll? мои знакомые телепаты все в отпуске, поэтому я не знаю, от каких аргументов отталкиваться чтоб объяснить почему Qt не замена asio/libev/libuv.

если что-то сильно нагруженное, то прямо ткнуть мордой в QObject.moveToThread и объяснить, что Qt не для многопоточной обработки, он для гуя. там нет распределения запросов по потокам.

example_cat
()
Ответ на: комментарий от anonymous

Речь про https://think-async.com/Asio/ , который может быть и без буста.

Я конечно понимаю, что кому-то буст поперек горла, да и укушенных александреску было много в свое время. Но сейчас то, в 2019м, не уметь писать на C++, и выкидывать буст по сомнительным мотивам - это позор. (Относится только к называющим себя С++ программистами, остальным это и не нужно, да).

какие кадры в таких конторах.

Таким кадрам CPP совсем нельзя давать. Накрутят 100500 уровней наследования, да еще и множественного, такой трындец, сами через полгода в этом утонут.

anonymous
()
Ответ на: комментарий от example_cat

Ну как бы для этого надо понимать, что такое общий и частный случай, что такое асимптоматическая сложность и почему и когда O(n) лучше чем O(logn). А так человек всегда использует листы на векторе и обычно у него все работает, а вот тут какая-то хрень получается. Такое регулярно встречается. В тех же почтовых ящиках где код пишется не программистами зачастую, а инженерами других специальностей.

yetanother
()

кто потребовал из контекста непонятно
но очевидно что куте это не про сетевую разработку
может куте для написание меил клиентов? тогда ок

anonymous
()
Ответ на: комментарий от example_cat

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

yetanother
()
Ответ на: комментарий от example_cat

во-первых, а имеется ли реальная потребность в epoll?

Хороший вопрос! Полагаю, что да. Системы тестируются под хорошими нагрузками: много I/O, узлов, сокетов. Надо, чтобы I/O работало как часы и не зависело от скорости отрисовки ГУЯ.

illy
() автор топика

Что посоветуете? :) Благодарю!

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

Пусть работодатель оплатит свои капризы сам.

EXL ☕☕☕☕☕
()

На вопрос «а как же epoll()» был получен ответ, что «QDataStream его поддерживает»

Что посоветуете?

Делать ноги

annulen 👍👍👍👍👍
()

был получен ответ, что «QDataStream его поддерживает»

Вряд ли вам там скорость нужна, видимо простота поддержки в приоритете.

DataStream медленный, на каждое считываемое поле идет аллокация памяти, если это не plain структуры. Иногда только здесь можно ускорить раза в 4.

QTcpServer даже не reentrant, строго с одного потока всё, т.е. даже мютексы не помогут. В сравнении с системными send\recv которые можно, например, вынести в два потока для tcp.

С виду 10 лет ничего не меняется.. но под капотом по мелочи постоянно что-то переписывают/ломают. Тормозной трекер придется почитывать https://bugreports.qt.io/browse/QTBUG-77365?jql=project = QTBUG AND component...

но это все эти проблемы останутся незамеченными если настоящих нагрузок нет

maxxant
()
Ответ на: комментарий от illy

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

example_cat
()
Ответ на: комментарий от maxxant

А еще забыл добавить. Неконтролируемый буфер записи у сокета. Можно узнать сколько реально отправилось только подписываясь на bytesWritten() для каждого сокета, иначе при больших объемах отправки эти гигабайты будут в памяти накапливаться, вплоть до крэша.

maxxant
()
Ответ на: комментарий от maxxant

Вряд ли вам там скорость нужна, видимо простота поддержки в приоритете.

Ещё как нужна! :) см выше:

Системы тестируются под хорошими нагрузками: много I/O, узлов, сокетов. Надо, чтобы I/O работало как часы и не зависело от скорости отрисовки ГУЯ.

Благодарю за инфу про потроха сетевого модуля кутэ!

illy
() автор топика

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

anonymous
()
Ответ на: комментарий от illy

в С++23 asio станет стандартом
и половину куте сами кутешники выбросят на помойку
переучиваться обратно будете ?
если скорость не нужна, запилите на ерланге, че

anonymous
()
Ответ на: комментарий от anonymous

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

Видимо, подразумевается орал? Будем знать.

Virtuos86 👍
()

я не спец в культе. но попадалось тут недавно на глаза вот такое: http://www.forum.crossplatform.ru/index.php?showtopic=10976

если такое существует в библиотеке, которая разрабатывается уже столько лет - это какбэ очень, очень подозрительно.

Iron_Bug ☕☕☕☕☕
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.