Комментарии 29
Спасибо
0
>И там было очень много велосипедов, которые писались самим программистом вместо того что бы использовать сторонние компоненты такие как boost
А можно было писать на winapi и не использовать велосипеды типа boost.
А можно было писать на winapi и не использовать велосипеды типа boost.
-9
ПО пишется для linux-а;)
В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче (так как он кроссплатформенный), чем если бы использовать конкретное api.
В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче (так как он кроссплатформенный), чем если бы использовать конкретное api.
+2
>ПО пишется для linux-а;)
Сервер ММО под линуксом? Корейцы негодуют.
>В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче
Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.
Сервер ММО под линуксом? Корейцы негодуют.
>В любом случае если использовать boost — то портировать под любую другую платформу будет намного легче
Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.
-2
> Сервер ММО под линуксом? Корейцы негодуют.
Как бы да. Вы считаете что Windows Server лучше подходит под такие задачи?
> Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.
Ну это скорее приятный бонус, который дается бесплатно. Если есть выбор из двух библиотек: кроссплатформенной и нет — то я бы остановился на первой при прочих равных.
Как бы да. Вы считаете что Windows Server лучше подходит под такие задачи?
> Это понятно. Вопрос в том, встанет ли вопрос о портировании вообще.
Ну это скорее приятный бонус, который дается бесплатно. Если есть выбор из двух библиотек: кроссплатформенной и нет — то я бы остановился на первой при прочих равных.
0
>Вы считаете что Windows Server лучше подходит под такие задачи?
Все забугорные реализации серверов под это дело, которые я видел, были заточены под винду. Видел две наших — с+фря и ява+линукс. У забугорных реализаций производительность была на порядок выше (использование IOCP вместо epoll/libevent, например).
Все забугорные реализации серверов под это дело, которые я видел, были заточены под винду. Видел две наших — с+фря и ява+линукс. У забугорных реализаций производительность была на порядок выше (использование IOCP вместо epoll/libevent, например).
-2
Ну все зависит от разработчика — можно и на 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:
Second Life использует Debian Linux
Perfect World — Linux.
Из движков:
Big World Tech — Linux
Hero Engine — поддерживает Linux и Windows.
Smart Fox Server — Linux, Windows, MacOSX
0
>Ещё вопрос почему большая часть высоконагруженых систем все-таки использует linux, а не windows?
Каких систем?
>Ну и пару примеров Linux-серверов MMO:
Для примера lineage 2 виндовый, knights online — тоже виндовый. Про еву не знаю — она мне была интересна только своими изысканиями в сторону stackless python. Кстати, интересно было бы узнать про ВоВ.
>Big World Tech — Linux
Точно? Я знавал одну контору в МСК, которая этот бигворлд пару лет назад лицензировать хотела, там вроде совсем не линукс был.
Каких систем?
>Ну и пару примеров Linux-серверов MMO:
Для примера lineage 2 виндовый, knights online — тоже виндовый. Про еву не знаю — она мне была интересна только своими изысканиями в сторону stackless python. Кстати, интересно было бы узнать про ВоВ.
>Big World Tech — Linux
Точно? Я знавал одну контору в МСК, которая этот бигворлд пару лет назад лицензировать хотела, там вроде совсем не линукс был.
+1
> Каких систем?
Тех, которые обслуживают большое число пользователей. Ну к примеру 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, и тд.
> Для примера lineage 2 виндовый, knights online — тоже виндовый. Про еву не знаю — она мне была интересна только своими изысканиями в сторону stackless python.
Я ж и не спорю, под windows тоже достаточно много хороших MMO серверов.
> Кстати, интересно было бы узнать про ВоВ.
Тоже очень интерестно, но такой информации в сети не видел.
Есть, кстати, open-source сервер WoW-а — MaNGOS — он кроссплатформенный.
> Точно? Я знавал одну контору в МСК, которая этот бигворлд пару лет назад лицензировать хотела, там вроде совсем не линукс был.
Тут и тут пишут, что linux.
0
> Тех, которые обслуживают большое число пользователей. Ну к примеру google, twitter, livejournal, digg, flickr, youtube, и тд.
В их случае наличие исходников может быть плюсом, как вариант(заточить ведро под проект). И, кстати, вышеперечисленные конторы решают абсолютно разные задачи. Но это так, к слову.
>под windows тоже достаточно много хороших MMO серверов
Мне казалось, их там подавляющее большинство. Впрочем, я этим вопросом уже года два как не интересуюсь.
>Есть, кстати, open-source сервер WoW-а
А есть опенсорсный сервер lineage2, то же кросплатформенный. На яве. Я даже когда-то в команде его разработчиков состоял.
В их случае наличие исходников может быть плюсом, как вариант(заточить ведро под проект). И, кстати, вышеперечисленные конторы решают абсолютно разные задачи. Но это так, к слову.
>под windows тоже достаточно много хороших MMO серверов
Мне казалось, их там подавляющее большинство. Впрочем, я этим вопросом уже года два как не интересуюсь.
>Есть, кстати, open-source сервер WoW-а
А есть опенсорсный сервер lineage2, то же кросплатформенный. На яве. Я даже когда-то в команде его разработчиков состоял.
0
насчет wow я сам долго искал и ничего толком не нашел про серверную архитектуру, единственное что могу предположить это то что сервера на линуксе. вот здесь (конкретную ссылку дать не получилось) в вакансиях на разработчика сервера было сказано про необоходимость опыта разработки модулей ядра линукса и опыта работы с oracle.
+1
Boost позволяет скрыть то чтобы вы бы наваяли используя winapi, больше того он позволяет в плане потоков забыть о конкретной платформе…
Ваш К.О.
Ваш К.О.
+1
Плохой, негодный К.О. В первом абзаце поста речь шла о разработке сервера ммошки, где эта кросплатформенность никуда не вперлась. Собственно, мой комментарий относился к контексту «приложение под задачу blah <=> целесообразность использования boost», а не к использованию boost вообще.
-1
Да, К.О. вас не понял ) Но, почему использование boost может быть нецелесообразно?.. Это замечательная библиотека, написанная профессионалами, стабильная — неужели вы считаете что в короткий срок сможете сделать достойную замену реализации которая предложена в boost? Почему же не использовать?..
-1
>Но, почему использование boost может быть нецелесообразно?..
Я видел полоумного чудака, который цепанул boost::format к приложению на голом posix api, потому как ему лень было написать обёртку над sprintf. И если за это не убивать, то за что тогда убивать вообще?
> неужели вы считаете что в короткий срок сможете сделать достойную замену реализации которая предложена в boost?
Реализации чего? В бусте 100500 батареек. Конкретно реализации тасков — я бы не взялся.
> Почему же не использовать?
Использовать-то можно, а местами буст незаменим. Главное, чтоб использующий с головой дружил.
Я видел полоумного чудака, который цепанул boost::format к приложению на голом posix api, потому как ему лень было написать обёртку над sprintf. И если за это не убивать, то за что тогда убивать вообще?
> неужели вы считаете что в короткий срок сможете сделать достойную замену реализации которая предложена в boost?
Реализации чего? В бусте 100500 батареек. Конкретно реализации тасков — я бы не взялся.
> Почему же не использовать?
Использовать-то можно, а местами буст незаменим. Главное, чтоб использующий с головой дружил.
-1
Ну в подтверждение сказаного про буст — ещё один пример: там были реализованы и умные указатели (shared и weak). Реализованы с использованием мютексов (для изменения счетчика ссылок). boost.smart_ptr — уже давно использует атомарные операции и в нет необходимости блокировок, ну и ещё много бонусов дает по сравнению с самописными реализациями (boost::enable_shared_from_this к примеру).
И это не первый раз когда я вижу, что кто то изобретает свои умные указатели. В универе понятное дело — можно эксперементировать, но на работе зачем?
И это не первый раз когда я вижу, что кто то изобретает свои умные указатели. В универе понятное дело — можно эксперементировать, но на работе зачем?
0
>И это не первый раз когда я вижу, что кто то изобретает свои умные указатели. В универе понятное дело — можно эксперементировать, но на работе зачем?
Каждый программист обязан написать свой smart_ptr, контейнер и сортировку. А вообще, эксперименты — дело полезное, 6 месяцев ресёрча дают офигический результат на выходе.
Каждый программист обязан написать свой smart_ptr, контейнер и сортировку. А вообще, эксперименты — дело полезное, 6 месяцев ресёрча дают офигический результат на выходе.
+2
А еще каждый программист обязан написать свой компилятор.
Считаю глупо писать свой смарт поинтер, контейнер и сортировку. Нужно просто прочитать книгу и понять как это работает.
Считаю глупо писать свой смарт поинтер, контейнер и сортировку. Нужно просто прочитать книгу и понять как это работает.
+1
> Нужно просто прочитать книгу и понять как это работает.
Чтение книг без написания кода — это фигня, потому как программисты-теоретики никому не нужны. Написание того же смартпоинтера научит обходить десяток-другой граблей при работе с указателями.
>А еще каждый программист обязан написать свой компилятор.
Да без проблем, если задача потребует.
Чтение книг без написания кода — это фигня, потому как программисты-теоретики никому не нужны. Написание того же смартпоинтера научит обходить десяток-другой граблей при работе с указателями.
>А еще каждый программист обязан написать свой компилятор.
Да без проблем, если задача потребует.
0
толсто :)
+1
>А можно было писать на winapi и не использовать велосипеды типа boost.
boost это расширение стандартной библиотеки шаблонов С++ (stl), а не «велосипед».
boost это расширение стандартной библиотеки шаблонов С++ (stl), а не «велосипед».
0
just::thread чет не порадовала платность библиотеки в 100$.
В boost::task не сильно понравилось, что в случае нехватки потоков, вызывающий поток блокируется, вместо того чтобы закинуть в очередь.
В boost::task не сильно понравилось, что в случае нехватки потоков, вызывающий поток блокируется, вместо того чтобы закинуть в очередь.
0
just::thread — платная, да. Но на их сайте много информации полезной;)
А boost::task имеет 2 стратегии — то про что вы говорите — bounded очередь, которая специально так и сделана. Но можно использовать unbounded — тогда задача будет добавляться сразу.
Попробуйте следующий код:
А 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.
0
rand()%100 + 10
Я понимаю, что топику уже 2 недели и что rand() это оффтопик, но все равно: How can I get random integers in a certain range?.
0
А за статью спасибо.
0
Эмм…
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это 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. Своеобразный крон такой.
Есть ли готовые решения в бусте? Ну или как с минимальным велосипедизмом люди делают?
а мне нужен планировщик расписания задач, но дело в том что по английски расписание — это 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. Своеобразный крон такой.
Есть ли готовые решения в бусте? Ну или как с минимальным велосипедизмом люди делают?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Планирование задач в сервере при помощи boost.task