Как стать автором
Обновить

Комментарии 29

>И там было очень много велосипедов, которые писались самим программистом вместо того что бы использовать сторонние компоненты такие как boost

А можно было писать на winapi и не использовать велосипеды типа boost.
ПО пишется для linux-а;)
В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче (так как он кроссплатформенный), чем если бы использовать конкретное api.
>ПО пишется для linux-а;)

Сервер ММО под линуксом? Корейцы негодуют.

>В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче

Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.
> Сервер ММО под линуксом? Корейцы негодуют.

Как бы да. Вы считаете что Windows Server лучше подходит под такие задачи?

> Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.

Ну это скорее приятный бонус, который дается бесплатно. Если есть выбор из двух библиотек: кроссплатформенной и нет — то я бы остановился на первой при прочих равных.
>Вы считаете что Windows Server лучше подходит под такие задачи?

Все забугорные реализации серверов под это дело, которые я видел, были заточены под винду. Видел две наших — с+фря и ява+линукс. У забугорных реализаций производительность была на порядок выше (использование IOCP вместо epoll/libevent, например).
Ну все зависит от разработчика — можно и на linux сделать неоптимальный сервер, ровно как и высоконагруженую систему (нету точной информации, но возможно, что EveOnline использует Windows, MS SQL они используют).

Ещё вопрос почему большая часть высоконагруженых систем все-таки использует linux, а не windows?

Ну и пару примеров Linux-серверов MMO:
Second Life использует Debian Linux
Perfect World — Linux.
Из движков:
Big World Tech — Linux
Hero Engine — поддерживает Linux и Windows.
Smart Fox Server — Linux, Windows, MacOSX
>Ещё вопрос почему большая часть высоконагруженых систем все-таки использует linux, а не windows?

Каких систем?

>Ну и пару примеров Linux-серверов MMO:

Для примера lineage 2 виндовый, knights online — тоже виндовый. Про еву не знаю — она мне была интересна только своими изысканиями в сторону stackless python. Кстати, интересно было бы узнать про ВоВ.

>Big World Tech — Linux

Точно? Я знавал одну контору в МСК, которая этот бигворлд пару лет назад лицензировать хотела, там вроде совсем не линукс был.
> Каких систем?

Тех, которые обслуживают большое число пользователей. Ну к примеру google, twitter, livejournal, digg, flickr, youtube, и тд.

> Для примера lineage 2 виндовый, knights online — тоже виндовый. Про еву не знаю — она мне была интересна только своими изысканиями в сторону stackless python.

Я ж и не спорю, под windows тоже достаточно много хороших MMO серверов.

> Кстати, интересно было бы узнать про ВоВ.

Тоже очень интерестно, но такой информации в сети не видел.

Есть, кстати, open-source сервер WoW-а — MaNGOS — он кроссплатформенный.

> Точно? Я знавал одну контору в МСК, которая этот бигворлд пару лет назад лицензировать хотела, там вроде совсем не линукс был.

Тут и тут пишут, что linux.
> Тех, которые обслуживают большое число пользователей. Ну к примеру google, twitter, livejournal, digg, flickr, youtube, и тд.

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

>под windows тоже достаточно много хороших MMO серверов

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

>Есть, кстати, open-source сервер WoW-а

А есть опенсорсный сервер lineage2, то же кросплатформенный. На яве. Я даже когда-то в команде его разработчиков состоял.
насчет wow я сам долго искал и ничего толком не нашел про серверную архитектуру, единственное что могу предположить это то что сервера на линуксе. вот здесь (конкретную ссылку дать не получилось) в вакансиях на разработчика сервера было сказано про необоходимость опыта разработки модулей ядра линукса и опыта работы с oracle.
Boost позволяет скрыть то чтобы вы бы наваяли используя winapi, больше того он позволяет в плане потоков забыть о конкретной платформе…
Ваш К.О.
Плохой, негодный К.О. В первом абзаце поста речь шла о разработке сервера ммошки, где эта кросплатформенность никуда не вперлась. Собственно, мой комментарий относился к контексту «приложение под задачу blah <=> целесообразность использования boost», а не к использованию boost вообще.
Да, К.О. вас не понял ) Но, почему использование boost может быть нецелесообразно?.. Это замечательная библиотека, написанная профессионалами, стабильная — неужели вы считаете что в короткий срок сможете сделать достойную замену реализации которая предложена в boost? Почему же не использовать?..
>Но, почему использование boost может быть нецелесообразно?..

Я видел полоумного чудака, который цепанул boost::format к приложению на голом posix api, потому как ему лень было написать обёртку над sprintf. И если за это не убивать, то за что тогда убивать вообще?

> неужели вы считаете что в короткий срок сможете сделать достойную замену реализации которая предложена в boost?

Реализации чего? В бусте 100500 батареек. Конкретно реализации тасков — я бы не взялся.

> Почему же не использовать?

Использовать-то можно, а местами буст незаменим. Главное, чтоб использующий с головой дружил.
>Конкретно реализации тасков — я бы не взялся.
>Использовать-то можно, а местами буст незаменим. Главное, чтоб использующий с головой дружил.

Так вот мы приходим к выводу, что в данном посте описано целесообразное применение boost ;-)
Ну в подтверждение сказаного про буст — ещё один пример: там были реализованы и умные указатели (shared и weak). Реализованы с использованием мютексов (для изменения счетчика ссылок). boost.smart_ptr — уже давно использует атомарные операции и в нет необходимости блокировок, ну и ещё много бонусов дает по сравнению с самописными реализациями (boost::enable_shared_from_this к примеру).
И это не первый раз когда я вижу, что кто то изобретает свои умные указатели. В универе понятное дело — можно эксперементировать, но на работе зачем?
>И это не первый раз когда я вижу, что кто то изобретает свои умные указатели. В универе понятное дело — можно эксперементировать, но на работе зачем?

Каждый программист обязан написать свой smart_ptr, контейнер и сортировку. А вообще, эксперименты — дело полезное, 6 месяцев ресёрча дают офигический результат на выходе.
А еще каждый программист обязан написать свой компилятор.

Считаю глупо писать свой смарт поинтер, контейнер и сортировку. Нужно просто прочитать книгу и понять как это работает.
> Нужно просто прочитать книгу и понять как это работает.

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

>А еще каждый программист обязан написать свой компилятор.

Да без проблем, если задача потребует.
толсто :)
>А можно было писать на winapi и не использовать велосипеды типа boost.

boost это расширение стандартной библиотеки шаблонов С++ (stl), а не «велосипед».
just::thread чет не порадовала платность библиотеки в 100$.

В boost::task не сильно понравилось, что в случае нехватки потоков, вызывающий поток блокируется, вместо того чтобы закинуть в очередь.
just::thread — платная, да. Но на их сайте много информации полезной;)

А boost::task имеет 2 стратегии — то про что вы говорите — bounded очередь, которая специально так и сделана. Но можно использовать unbounded — тогда задача будет добавляться сразу.

Попробуйте следующий код:

void SleepTask(int i)
{
  std::cout<<" * task"<<i<<" begin\n";
  boost::this_thread::sleep(boost::posix_time::milliseconds(rand()%100 + 10));
  std::cout<<" * task"<<i<<" end\n";
}

boost::tasks::static_pool< boost::tasks::unbounded_fifo > pool( boost::tasks::poolsize( 5) );

std::vector<boost::tasks::handle< void > > task_list;
for(int i = 0; i < 100; ++i)
{
  task_list.push_back(boost::tasks::async(
    boost::tasks::make_task( &SleepTask, i ),
    pool));
}
std::cout<<" * all tasks scheduled\n";
boost::tasks::waitfor_all(task_list.begin(), task_list.end());

* This source code was highlighted with Source Code Highlighter.
rand()%100 + 10

Я понимаю, что топику уже 2 недели и что rand() это оффтопик, но все равно: How can I get random integers in a certain range?.
Я в курсе, что это не правельный рандом, но в данном случае и небыло потребности в исключительно правелном;)
Ну раз уж топик про буст — там есть библиотека генерации случайный чисел.
А за статью спасибо.
Рад, что вам понравилось.
Эмм…
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это scheduler и планировщик — это scheduler, и вот я нагуглил Вашу статью. Тема конечно интересная, но не совсем то, что мне в данный момент нужно (а тут речь скорее идет о пуле задач и потоков или о задаче «Round-robin» https://ru.wikipedia.org/wiki/Round-robin_(%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC) )

А мне нужно такое:
добавлять задачу и время её выполнения (или периодичность — не суть) Ну и компонента уже сама выполняет добавленные задачи когда наступает время X. Своеобразный крон такой.

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

Публикации

Изменить настройки темы

Истории