Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокеты для большого сервера 
:(
    Опции темы
kometa_75
Дата 17.2.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 24.10.2007

Репутация: нет
Всего: нет



Цитата(xvr @ 17.2.2011,  16:36)
Цитата(kometa_75 @  17.2.2011,  15:44 Найти цитируемый пост)
ЗЫ. Говорю именно про потоки, а не нити, процессы и т.п.

А кто же тогда 'потоки'? ('поток', он же thread, он же 'нить')

В винде fiber и thread имеют отличия. В *nix действительно, разницы нет. Однако мой вопрос был задан отнюдь не в контексте какой-либо конкретной ОС. 
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core? Меня серьёзно интересует эта тема, ничего конкретного я пока сам не нарыл. Восновном "должно быть лучше", "теоретически", "опыты показали"...
PM MAIL   Вверх
xvr
Дата 17.2.2011, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(kometa_75 @  17.2.2011,  16:50 Найти цитируемый пост)
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core?
Нету таких пока. Вендоры нацелились на многокоровость, т.к. на пути повышения тактовой частоты и архитектурного ускорения одно-потокового кода уже практически уперлись в стену smile Дальнейшее увеличение производительности потребует каких то революционных изменений в архитектуре (или вообще новых архитектур), а вот этого то как раз вендоры делать и не хотят, т.к. уже наелись 'революций' (безуспешных)  smile 

PM MAIL   Вверх
kometa_75
Дата 17.2.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 24.10.2007

Репутация: нет
Всего: нет



Цитата(xvr @ 17.2.2011,  16:56)
Цитата(kometa_75 @  17.2.2011,  16:50 Найти цитируемый пост)
Повторюсь, кто и где встречал в спецификации от hardware/software вендоров что-нибудь типа one thread-one core?
Нету таких пока. Вендоры нацелились на многокоровость, т.к. на пути повышения тактовой частоты и архитектурного ускорения одно-потокового кода уже практически уперлись в стену smile Дальнейшее увеличение производительности потребует каких то революционных изменений в архитектуре (или вообще новых архитектур), а вот этого то как раз вендоры делать и не хотят, т.к. уже наелись 'революций' (безуспешных)  smile

Ну я собственно что хотел сказать своим вопросом. Встречался неоднократно с мнением, что якобы многопоточное приложение более пропорционально масштабируется на многоядерной(НЕ многопроцессорной!!!) системе, нежели однопоточное.
Ради интереса провёл много тестов, и не нашёл подтверждения этому предположению. Скажем так, всё было скорее всего наоборот.
Понятное дело, что потоки нужны. Тот же epoll крайне рекомендуется делать в отдельном потоке. Как уже писали в этой теме, правильно надо масштабировать задачи. А то что чрезмерное увлечение(применять всегда и везде где только можно) потоками - неистребимое зло, сказано было уже давно и неоднократно.
PM MAIL   Вверх
xvr
Дата 17.2.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(kometa_75 @ 17.2.2011,  17:13)
Ну я собственно что хотел сказать своим вопросом. Встречался неоднократно с мнением, что якобы многопоточное приложение более пропорционально масштабируется на многоядерной(НЕ многопроцессорной!!!) системе, нежели однопоточное.

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно. Разница между ними чисто количественная (типа размеров и принадлежностей кэшей, задержки на их синхронизацию и пр). И настоящее многопоточное приложение действительно будет масштабироваться.
Цитата

Ради интереса провёл много тестов, и не нашёл подтверждения этому предположению. 
Каких тестов? Приложение должно быть не просто многопоточным, но все его  потоки должны одновременно что то вычислять. Таких задач не так уж и много, а в быту их вообще нет. В основном это всякие CAD'ы, связанные с матричными (и подобными) расчетами. Например - обработка видео, трассировка плат и FPGA, тепловые расчеты, механические расчеты, 3D моделирование.

Цитата

Понятное дело, что потоки нужны. Тот же epoll крайне рекомендуется делать в отдельном потоке. 
Это не те потоки, где будет заметен выигрыш от многокоровости/многопроцессорности. Потоки должны работать, а не ждать

Цитата

Как уже писали в этой теме, правильно надо масштабировать задачи. А то что чрезмерное увлечение(применять всегда и везде где только можно) потоками - неистребимое зло, сказано было уже давно и неоднократно.
Угу, несомненно. 
PM MAIL   Вверх
kometa_75
Дата 18.2.2011, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 24.10.2007

Репутация: нет
Всего: нет



Цитата

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно.

Позволю не согласиться. В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры. Многопоточное - также. Для этого и созданы специальное API, компиляторы. С многоядерным процессором немного иначе. Тут нельзя однозначно определить как и по какому принципу нагрузка будет масштабирована на ядра.

Цитата

И настоящее многопоточное приложение действительно будет масштабироваться.

Оно будет масштабироваться примерно также как и однопоточное. Хотя возможны вариации. 

Цитата
Каких тестов? Приложение должно быть не просто многопоточным, но все его  потоки должны одновременно что то вычислять. Таких задач не так уж и много, а в быту их вообще нет.

Что подразумевается под "в быту"? Вот реальный пример. Сервер для онлайн-игры. Имеется множество равнозначных игровых сессий. В каждой просчёт игрового своего мини-мира, физика, логика и т.п. Каждая сессия активна, т.е. не ждёт, а что-то вычисляет. Второй вариант, имеется совокупность зон-локаций. В каждой выполняется просчёт мира, мобов и т.д. Как видите, очень напрашивается идея организовать каждую сущность в отдельном потоке. 
Не буду приводить примеры из области параллельных вычислений. Их там достаточно. И классическая многопоточность там не используется.

Цитата
Это не те потоки, где будет заметен выигрыш от многокоровости/многопроцессорности. Потоки должны работать, а не ждать

Выигрыш от потоков, на мой взгляд, это исключительно выигрыш за счёт более рационального использования effective work time. Т.е. в основном это параллельное выполнение какой-либо задачи со своими нюансами основанными на времени выполнения. Сам поток никаким образом не "ускорит" программу, и отличное(от однопотоного приложения) масштабирование потоков на разные ядра-процессоры, как мне кажется, это необоснованный миф.

PM MAIL   Вверх
borisbn
Дата 18.2.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Цитата(kometa_75 @  18.2.2011,  11:26 Найти цитируемый пост)
В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры

пожалуй, соглашусь

Цитата(kometa_75 @  18.2.2011,  11:26 Найти цитируемый пост)
Многопоточное - также. Для этого и созданы специальное API, компиляторы

а вот тут... в linux, честно говоря, не знаю, а windows сама распределяет нагрузку по процессорам/ядрам, так что пруф-линк, пожалуйста. 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
xvr
Дата 18.2.2011, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(kometa_75 @ 18.2.2011,  11:26)
Цитата

Разницы между многоядерной (действительно многоядерной, а не просто HyperThread'инговой!) и многопроцессорной системой быть не должно.

Позволю не согласиться. В многопроцессорной конфигурации однопоточное приложение не будет гарантировано задействовать все процессоры. 

Я бы даже сказал - гарантированно не будет
Цитата

Многопоточное - также. 
Будет
Цитата

Для этого и созданы специальное API, компиляторы. 
API - да, а компиляторы можно и обычные использовать. А можно и специальные расширения использовать. 
Цитата

С многоядерным процессором немного иначе. Тут нельзя однозначно определить как и по какому принципу нагрузка будет масштабирована на ядра.
С точки зрения API да и вообще доступной для программиста архитектуры системы система с многоядерным процессором НИЧЕМ НЕ ОТЛИЧАЕТСЯ от многопроцессорной системы. 
Цитата

Цитата

И настоящее многопоточное приложение действительно будет масштабироваться.

Оно будет масштабироваться примерно также как и однопоточное. Хотя возможны вариации. 
Без вариантов. Должно масштабироваться. Иначе оно криво написано  smile 
Цитата

Сервер для онлайн-игры. Имеется множество равнозначных игровых сессий. В каждой просчёт игрового своего мини-мира, физика, логика и т.п. Каждая сессия активна, т.е. не ждёт, а что-то вычисляет. 
При современных мощностях процессоров сессии скорее всего будут ждать действий игроков. Вычисления будут занимать немного времени.
Цитата

Второй вариант, имеется совокупность зон-локаций. В каждой выполняется просчёт мира, мобов и т.д.
Аналогично.
Есть простой тест - берем однокоровый/однопроцессорный вариант, запускаем тестируемую прогу. Смотрим загрузку процессора - если она не 100%, то распараллеливать тут нечего.
Потом берем многокоровый/многопроцессорный сервер. Запускаем, смотрим загрузку - если она не 100% по всем корам, то налицо недоиспользование ресурсов, т.е. криво распараллелено (либо нужна большая нагрузка - больше клиентов или подобное).
Если все ок, сравниваем скорость работы. Должна повысится пропорционально количеству коров/процессоров
Цитата

Не буду приводить примеры из области параллельных вычислений. Их там достаточно. И классическая многопоточность там не используется.
Дык, а кто не дает ее использовать? Разумеется, что бы программа работала быстрее на многокоровой машине она должна быть грамотно написана. Простое однопоточное приложение не станет работать быстрее на многокоровой машине.

Цитата

Выигрыш от потоков, на мой взгляд, это исключительно выигрыш за счёт более рационального использования effective work time. Т.е. в основном это параллельное выполнение какой-либо задачи со своими нюансами основанными на времени выполнения. 
Это немного другой аспект использования потоков - для упрощения логической структуры программы. Ускорения здесь не будет
Цитата

Сам поток никаким образом не "ускорит" программу, 
В общем да.
Цитата

и отличное(от однопотоного приложения) масштабирование потоков на разные ядра-процессоры, как мне кажется, это необоснованный миф.
А мне кажется, что вы не в курсе, что такое многоядерные процессоры  smile По сути это несколько независимых процессоров, собранных на одном кристалле. И на них потоки отличным образом ложатся. 
Термин 'масштабируются потоки' тут несколько неуместен, масштабировать можно все приложение целиком, путем создания в нем стольких потоков, сколько есть процессоров. Тогда будет достигнута максимальная производительность и загрузка аппаратуры.

PM MAIL   Вверх
MAKCim
Дата 18.2.2011, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(xvr @  18.2.2011,  14:04 Найти цитируемый пост)
С точки зрения API да и вообще доступной для программиста архитектуры системы система с многоядерным процессором НИЧЕМ НЕ ОТЛИЧАЕТСЯ от многопроцессорной системы. 

я даже больше скажу
на программном уровне даже на уровне ядра будет обычное представление cpu0, cpu1, cpu2, ...
и не суть важно, cpu0 - это процессор или физическое ядро, или логическое ядро (hyper threading)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.