|
|
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Я - начинающий программист на С++. Есть проблема - сервер на более чем 1024 соединения. ----------------------------------- Как эта проблема решаеться на Jave? Может кто кинет ссылки на проекты или в общих чернтах опишет способы решения. Нужно для сравнения сложности решения. Может отрекусь от С++ и подамся в Java-программисты :) -------------------------------------- PS Как из этого форума глючные сообщения удалять? PPS Не нажимайте Ctrl+Enter! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:11 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Вроде у сисадминов праздник, а вы туда же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:15 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Дык если у тебя проблема с сервером, причем здесь С++ или Java ? А если тебе надо создать серверную часть приложения, то опиши хотя бы какие задачи должно решить приложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:23 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
U javi takoj problemi netu ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:35 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Метод работы: 1. Создать фабрику потоков, обслуживающих соединения. Фабрика - естественно синглтон (singleton). 2. В фабрику внедрить счетчик. 3. По достижении критического значения не создавать новые потоки. Делов то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:37 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Нет, недавать это скучно. Почитайте про Java NIO Там хоть 10000 одновременных соединений можно отрабатывать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:47 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
TomasoU javi takoj problemi netu эт у тебя юмор такой своеобразный? лучше бы поучил, что такое переменные окружения в виндах количество открытых сокетов для процесса задается реализацией WOSA в линуксе/линуксе ограничением является максимальное количество открытых файловых дескрипторов just another freak in the Freak Kingdom ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:50 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Общая идея - много клиентов ( >1024) одновременно коннектяться и шлют пакеты данных. Для коннекта используються TCP - соединения. Проблема в том, что под Линуксом в одном процессе не может быть более, чем 1024 открытых дескрипторов, можно, конечно, пересобрать ядро, но это не выход. -------------------- Не думаю, что у Явы такой проблемы нету, разве что одна Ява-машина выполняеться сразу на нескольких процессах OS. Насколько я знаю, одному приложению соответствует одна Ява-машина, которой соответствует один процесс OS. ------------------- Использовать счётчик, действительно, не проблема. Проблема в том, что-бы держать большое кол-во соединений одновременно, а не отказывать клиентам в соединении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:53 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
За Java NIO спасибо. Сейчас полезу читать, что это такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:55 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
В общем - то клиенты все свое основное время спят. Так что можно как-то асинхронно складировать запросы от клиентов в одном потоке, а во втором потоке обходить все запросы, и если запрос готов (полностью сформирован), выполнять запрос. В таком случае достаточно 2 (двух) потоков. Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм. Я люблю подискутировать относительно того, что из языка сделал Строуструп (как-то весной я это делал активно), но к делу это не относится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:57 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Если проблема в кол-ве открытых дескрипторов файлов в Линуксе, то пересоздавать ядра не надо, просто надо увеличть это число, помойму командой: ulimit -n 10240 10240 - кол-во открытых файлов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:58 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
A 4to web server delaet u tebja? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 15:58 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
nomadeЗа Java NIO спасибо. Сейчас полезу читать, что это такое. Ron Hitchens "Java NIO" (O'Reilly) и на onjava.com были статьи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 16:00 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
А что у тебя клиенты на сервер шлют? Может, через веб-сервисы будет лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 16:23 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
RE Сергею Ильичу: 2( два ) потока должны работать с ( напр. ) 10000 ( тьма) соединениями. Проблема в кол-ве соединений. >> Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм. Наверное, Сергею Ильичу виднее, но зачем тогда столько шума о преимуществах Явы над всеми остальными языками (?) . Короче, умные люди так ответы не формулируют. ------------------------------ ulimit -n 10000 - благодарю за ценную мысль, сейчас над этим работаю, может, все проблемы решаться одним махом. ------------------------------ Вариант с WEB сервером обсуждаеться, возможно, буду делать так. Но в данном случае важно время реакции. Надо будет попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 17:33 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
nomadeRE Сергею Ильичу: 2( два ) потока должны работать с ( напр. ) 10000 ( тьма) соединениями. Если на уровне API или настроек операционной системы запрещено иметь более N соединений, то причем тут язык? JVM пользуется теми же системными вызованми. nomade Проблема в кол-ве соединений. >> Сранивать С и язык, написанный на С, особенно в данном контексте - идиотизм. Наверное, Сергею Ильичу виднее, но зачем тогда столько шума о преимуществах Явы над всеми остальными языками (?) . И какой шум? Приемущество JVM в том, что ни одна библиотечка *физически* не способна разрушить мои объекты, поскольку модель памяти это не позволяет. Это критическое приемущество для бизнес программирования, и из-за этого Java и C# постепенно вытесняют компилируемые в native языки в этой сфере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 18:51 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
nomade Для коннекта используються TCP - соединения. Проблема в том, что под Линуксом в одном процессе не может быть более, чем 1024 открытых дескрипторов, можно, конечно, пересобрать ядро, но это не выход. Можно поднять несколько экземпляров Java процесса. А для коородинации их использовать ... экземпляр мастер-процесса. Для взаимодействия можно попробовать те-же сокеты, пайпы (или юникс-сокеты (кстати интересный вопрос .. как Java с ними взаимо- действует.. ). Вообще ... что эт за клиенты такие. Может их в пул загнать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 19:09 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Можно поднять несколько экземпляров Java процесса. А для коородинации их использовать ... экземпляр мастер-процесса. Кому охота, поднимайте, только советовать зачем. Кстати, потоки (thread) Java не обязаны соответствовать потокам операционной системы. А в Linux можно получить и более 1024 потоков и без перекомпиляции ядра, так что сведения старые. В общем, флейм. У кого вопрос по С++ пусть обращается в форум по С++ю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 20:09 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Кажеться ulimit -n помогает. Вначале предполагалось создавать пулы потоков и несколько процессов, теперь, думаю, до этого не дойдёт. Спасибо за ценный совет. --------------------------- RE Partisan_M Я собственно хотел узнать, сушествует ли стандартное решение проблемы большого кол-ва коннектов на J2EE, она как-бы делалась для промышленных приложений. Насколько я понял, в Яве это - такой же геморрой, как и в С++, так что С++ forever. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 21:23 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
nomade Я собственно хотел узнать, сушествует ли стандартное решение проблемы большого кол-ва коннектов на J2EE, она как-бы делалась для промышленных приложений. Насколько я понял, в Яве это - такой же геморрой, как и в С++, так что С++ forever. "стандартного" решения превышенной нагрузки не существуют, есть лоад-балансеры, есть пулы соединений под конкретные сервера и конкретную область задач. C++ форевер, это емкое высказывание не оспоришь, но для создания распределенных, многокомпонентных, легко масштабируемых приложений ява подходит все же лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2005, 21:35 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
Привет. Если мне склероз не изменяет, то например на линухе с ядром 2.6 библиотека pthreads по умолчанию ограничивает число ниток до 8196 на процесс В раньше для старого ядра 2.4 было ограничение 1024 так как неважно, будь то java или С++ - используют вызовы ядра через pthreads, то значит и число ниток вызываемых зависит от pthreads. потому никакого versus быть не должно Увеличить число ниток можно по моему перекомпиляцией glibc, но надо понимать, действительно ли у вас будет столько одновременно активных ниток, а не открытых, но ждущих. И если нитки будут именно активны, тогда подумайте о правильном железе, какая вам тогда нужна будет система ввода -вывода и сколько процессоров смогут вытянуть такую нагрузку. По моему ситуевина явно придуманная и искуственная. Димыч ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 09:17 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
nomadeКажеться ulimit -n помогает. Вначале предполагалось создавать пулы потоков и несколько процессов, теперь, думаю, до этого не дойдёт. Спасибо за ценный совет. набери к консоли: ulimit -a увидишь много полезных параметров, которые можно настроить. кстати, что бы изменения этих парметров стали постоянными: echo "ulimit -n 10000" >> ~/.bashrc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 10:23 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
По поводу стандартных решений большого кол-ва коннектов: делается пул потоков, обслуживащий соединения и очередь запросов этих соединений. Очередь запросов должна быть ограничена размумным числом (зависит от самого железа сервера и ессесено прогрммного обеспечения). Те запросы, что не попали в очередь, когда она уже забита, просто отбрасываются, те, что попали в очередь, ждут некоторое время(таймаут) и если за это время коннекшен не получен, удаляются из нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 10:33 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
ДимГеннадьичтак как неважно, будь то java или С++ - используют вызовы ядра через pthreads, то значит и число ниток вызываемых зависит от pthreads. потому никакого versus быть не должно Неа. Есть такая штука, как green threads. Это потоки внутри JVM, для них не порождаются системные потоки в отношении 1-1 (несколько green threads могут использовать 1 системный поток) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 11:40 |
|
||
|
C++ vs Java [2]
|
|||
|---|---|---|---|
|
#18+
ДимГеннадьичПривет. Если мне склероз не изменяет, то например на линухе с ядром 2.6 библиотека pthreads по умолчанию ограничивает число ниток до 8196 на процесс В раньше для старого ядра 2.4 было ограничение 1024 Если Вы внимательно читали топик, проблема не в количестве тредов, а в количестве соединений, т.к для работы с клиентами используется безтредовый (асинхронный) принцип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2005, 11:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33189810&tid=2151824]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 498ms |

| 0 / 0 |
