powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / C++ vs Java [2]
29 сообщений из 29, показаны все 2 страниц
C++ vs Java [2]
    #33189648
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я - начинающий программист на С++.
Есть проблема - сервер на более чем 1024 соединения.
-----------------------------------
Как эта проблема решаеться на Jave? Может кто кинет ссылки на проекты или в общих чернтах опишет способы решения.
Нужно для сравнения сложности решения.

Может отрекусь от С++ и подамся в Java-программисты :)
--------------------------------------
PS
Как из этого форума глючные сообщения удалять?
PPS
Не нажимайте Ctrl+Enter! :)
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189659
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде у сисадминов праздник, а вы туда же
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189683
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык если у тебя проблема с сервером, причем здесь С++ или Java ?
А если тебе надо создать серверную часть приложения, то опиши хотя бы какие задачи должно решить приложение?
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189722
Tomaso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U javi takoj problemi netu
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189728
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод работы:

1. Создать фабрику потоков, обслуживающих соединения. Фабрика - естественно синглтон (singleton).
2. В фабрику внедрить счетчик.
3. По достижении критического значения не создавать новые потоки.

Делов то...
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189756
Dimonische
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, недавать это скучно.

Почитайте про Java NIO Там хоть 10000 одновременных соединений можно отрабатывать
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189768
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TomasoU javi takoj problemi netu

эт у тебя юмор такой своеобразный? лучше бы поучил, что такое переменные окружения

в виндах количество открытых сокетов для процесса задается реализацией WOSA

в линуксе/линуксе ограничением является максимальное количество открытых файловых дескрипторов

just another freak in the Freak Kingdom
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189776
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Общая идея - много клиентов ( >1024) одновременно коннектяться и шлют пакеты данных.
Для коннекта используються TCP - соединения.
Проблема в том, что под Линуксом в одном процессе не может быть более, чем 1024 открытых дескрипторов, можно, конечно, пересобрать ядро, но это не выход.
--------------------
Не думаю, что у Явы такой проблемы нету, разве что одна Ява-машина выполняеться сразу на нескольких процессах OS. Насколько я знаю, одному приложению соответствует одна Ява-машина, которой соответствует один процесс OS.
-------------------
Использовать счётчик, действительно, не проблема. Проблема в том, что-бы держать большое кол-во соединений одновременно, а не отказывать клиентам в соединении.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189788
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
За Java NIO спасибо. Сейчас полезу читать, что это такое.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189793
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем - то клиенты все свое основное время спят.
Так что можно как-то асинхронно складировать запросы от клиентов в одном потоке, а во втором потоке обходить все запросы, и если запрос готов (полностью сформирован), выполнять запрос.
В таком случае достаточно 2 (двух) потоков.

Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм.
Я люблю подискутировать относительно того, что из языка сделал Строуструп (как-то весной я это делал активно), но к делу это не относится.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189799
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если проблема в кол-ве открытых дескрипторов файлов в Линуксе, то пересоздавать ядра не надо, просто надо увеличть это число, помойму командой:
ulimit -n 10240
10240 - кол-во открытых файлов
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189800
Tomaso
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A 4to web server delaet u tebja?
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189810
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadeЗа Java NIO спасибо. Сейчас полезу читать, что это такое.

Ron Hitchens "Java NIO" (O'Reilly)

и на onjava.com были статьи
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33189906
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что у тебя клиенты на сервер шлют? Может, через веб-сервисы будет лучше?
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190141
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RE Сергею Ильичу: 2( два ) потока должны работать с ( напр. ) 10000 ( тьма) соединениями.
Проблема в кол-ве соединений.
>> Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм.
Наверное, Сергею Ильичу виднее, но зачем тогда столько шума
о преимуществах Явы над всеми остальными языками (?) .
Короче, умные люди так ответы не формулируют.

------------------------------
ulimit -n 10000 - благодарю за ценную мысль, сейчас над этим работаю, может, все проблемы решаться одним махом.

------------------------------
Вариант с WEB сервером обсуждаеться, возможно, буду делать так.
Но в данном случае важно время реакции. Надо будет попробовать.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190321
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomadeRE Сергею Ильичу: 2( два ) потока должны работать с ( напр. ) 10000 ( тьма) соединениями.

Если на уровне API или настроек операционной системы запрещено иметь более N соединений, то причем тут язык? JVM пользуется теми же системными вызованми.
nomade
Проблема в кол-ве соединений.
>> Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм.
Наверное, Сергею Ильичу виднее, но зачем тогда столько шума
о преимуществах Явы над всеми остальными языками (?) .

И какой шум? Приемущество JVM в том, что ни одна библиотечка *физически* не способна разрушить мои объекты, поскольку модель памяти это не позволяет.
Это критическое приемущество для бизнес программирования, и из-за этого Java и C# постепенно вытесняют компилируемые в native языки в этой сфере.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190337
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomade
Для коннекта используються TCP - соединения.
Проблема в том, что под Линуксом в одном процессе не может быть более, чем 1024 открытых дескрипторов, можно, конечно, пересобрать ядро, но это не выход.


Можно поднять несколько экземпляров Java
процесса. А для коородинации их использовать
... экземпляр мастер-процесса.

Для взаимодействия можно попробовать те-же
сокеты, пайпы (или юникс-сокеты (кстати
интересный вопрос .. как Java с ними взаимо-
действует.. ).

Вообще ... что эт за клиенты такие. Может
их в пул загнать?
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190388
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Можно поднять несколько экземпляров Java
процесса. А для коородинации их использовать
... экземпляр мастер-процесса.

Кому охота, поднимайте, только советовать зачем.


Кстати, потоки (thread) Java не обязаны соответствовать потокам операционной
системы. А в Linux можно получить и более 1024 потоков и без перекомпиляции ядра, так что сведения старые. В общем, флейм. У кого вопрос по С++ пусть обращается в форум по С++ю
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190443
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажеться ulimit -n помогает.
Вначале предполагалось создавать пулы потоков и несколько процессов,
теперь, думаю, до этого не дойдёт.
Спасибо за ценный совет.
---------------------------
RE Partisan_M
Я собственно хотел узнать, сушествует ли стандартное решение проблемы большого кол-ва коннектов на J2EE, она как-бы делалась для промышленных приложений.
Насколько я понял, в Яве это - такой же геморрой, как и в С++,
так что С++ forever.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190452
коты
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nomade
Я собственно хотел узнать, сушествует ли стандартное решение проблемы большого кол-ва коннектов на J2EE, она как-бы делалась для промышленных приложений.
Насколько я понял, в Яве это - такой же геморрой, как и в С++,
так что С++ forever.

"стандартного" решения превышенной нагрузки не существуют, есть лоад-балансеры, есть пулы соединений под конкретные сервера и конкретную область задач.

C++ форевер, это емкое высказывание не оспоришь, но для создания распределенных, многокомпонентных, легко масштабируемых приложений ява подходит все же лучше.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190687
ДимГеннадьич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Если мне склероз не изменяет, то например на линухе с ядром 2.6 библиотека pthreads по умолчанию ограничивает число ниток до 8196 на процесс
В раньше для старого ядра 2.4 было ограничение 1024

так как неважно, будь то java или С++ - используют вызовы ядра через pthreads,
то значит и число ниток вызываемых зависит от pthreads.
потому никакого versus быть не должно

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

По моему ситуевина явно придуманная и искуственная.

Димыч
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190870
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nomadeКажеться ulimit -n помогает.
Вначале предполагалось создавать пулы потоков и несколько процессов,
теперь, думаю, до этого не дойдёт.
Спасибо за ценный совет.


набери к консоли:
ulimit -a
увидишь много полезных параметров, которые можно настроить.

кстати, что бы изменения этих парметров стали постоянными:
echo "ulimit -n 10000" >> ~/.bashrc
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33190901
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу стандартных решений большого кол-ва коннектов: делается пул потоков, обслуживащий соединения и очередь запросов этих соединений. Очередь запросов должна быть ограничена размумным числом (зависит от самого железа сервера и ессесено прогрммного обеспечения). Те запросы, что не попали в очередь, когда она уже забита, просто отбрасываются, те, что попали в очередь, ждут некоторое время(таймаут) и если за это время коннекшен не получен, удаляются из нее.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33191204
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДимГеннадьичтак как неважно, будь то java или С++ - используют вызовы ядра через pthreads,
то значит и число ниток вызываемых зависит от pthreads.
потому никакого versus быть не должно


Неа. Есть такая штука, как green threads. Это потоки внутри JVM, для них не порождаются системные потоки в отношении 1-1 (несколько green threads могут использовать 1 системный поток)
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33191272
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДимГеннадьичПривет.
Если мне склероз не изменяет, то например на линухе с ядром 2.6 библиотека pthreads по умолчанию ограничивает число ниток до 8196 на процесс
В раньше для старого ядра 2.4 было ограничение 1024
Если Вы внимательно читали топик, проблема не в количестве тредов, а в количестве соединений, т.к для работы с клиентами используется безтредовый (асинхронный) принцип.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33191327
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю Сергея Ильича.

Добавлю.

Концепция работы с большим количеством клиентов
предполагает различные режимы мультиплексирования
коннектов. Пул является одним из вариантов
реализации этого принципа. В таких случаях
приложение разделяется на уровени
диспетчеризации и обработки операций
(транзакций). Яркий пример - OLTP .

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

На практике обычно хватает пула.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33192310
nomade
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ulimit - rulezz
Я ещё поискал и нашёл функцию Линукса setrlimit, которая делает тоже, что и команда bash ulimit.
Интересно, что с пом. ulimit увеличить число дескрипторов можно только под рутом, а setrlimit работает и под юзером.
Пулы потоков, наверное, самое оптимальное решение, что-то похожее делает Apache,
один ушлый буржуй взял эту архитектуру и зашитил диссертацию, реализовал Apache на Яве.
Насчёт ограничений Линукса у меня были сильно устаревшие представления.
Одна голова - хорошо, а форум - лучше.
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33192891
Аймин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кувалдин РоманМетод работы:

1. Создать фабрику потоков, обслуживающих соединения. Фабрика - естественно синглтон (singleton).
2. В фабрику внедрить счетчик.
3. По достижении критического значения не создавать новые потоки.

Делов то...

А как создать синглтон?
...
Рейтинг: 0 / 0
C++ vs Java [2]
    #33193905
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Синглтоны делаются примерно вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 public   class  SampleSingleton
{
     private   static  SampleSingleton instance;

    // private constructor, чтобы экземпляры класса нельзя было порождать извне
     private  SampleSingleton()
    {
        // инициализация
    }

     public   static   synchronized  getInstance()
    {
         if (instance== null )
        {
            instance =  new  SampleSingleton();
        }
    }
}

...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / C++ vs Java [2]
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]