powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Межпроцесное взаимодействие с Ява приложением или кодом.
41 сообщений из 41, показаны все 2 страниц
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337379
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Прошу поделиться опытом решения таких задач.

С одной стороны ява_код либо ява приложение, с другой стороны С++_код либо С++ приложение. Требуется со стороны С++ обрабатывать данные с потока вывода и передавать Яве(коду или приложению) и принимать данные от Ява (кода или приложения) всё надо делать асинхронно и кроссплатформенно(желательно) но можно и просто под Посикс.

В Ява ветке пишут что нет возможности использовать Буст::Спирит из JNI, (да, со стороны С++ либо код Спирита, либо скомпилинный код), т.е. если код не вызвать (и нужно ли? там наверно жудкие тормоза) значить компилить парсеры, считывать поток вывода и как то его отдавать Ява приложению, варианты:

1.WSDL поделитесь историями успеха? есть библиотеки или как это прикрутить?
2. Через БД, был опыт исопльзования МуСКЛ С++ АПИ, впечатление оставил неизгладимое, с учетом того что парсеров не мало, между собой они не связаны, придется писать ЦУП с пулами, которому каждый парсер будет отдавать/принимать инфу, но прогресс не стоит на месте, новые стандарты.. м б ОРМы есть, но чувствую это не самый простой вариант.
3.Доменные сокеты Посикса, тсп-айпи, очереди.. и прочие артефакты из книг Стивенса)))

Коллеги, подскажите что в тренде, как передать данные межды С++ и Явой, асинхронно, кроссплатформенно, и без голавников со стороны плюсов. Благодарю!
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337389
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________как передать данные межды С++ и Явой, асинхронно, кроссплатформенно, и
без голавников со стороны плюсов.
TCP или UDP - проще и кросплатформеннее всего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337393
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkT_________как передать данные межды С++ и Явой, асинхронно, кроссплатформенно, и
без голавников со стороны плюсов.
TCP или UDP - проще и кросплатформеннее всего.


ммм, ну как проще... по мне так WSDL проще всего, а для тисипи-айпи это надо Буст::Асио или АСЕ ..что бы руками не прописывать:
Код: plaintext
1.
int bind(int sockfd, struct sockaddr *addr, int addrlen);



не.. всё таки 2013 год. А там маршалинг/демаршалинг, и если куча парсеров то на удп, не буду же я 100500 портов открывать на тсп. Спасибо Вам. Но грусно как-то..
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337397
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безотносительно к языкам:
- Самое простое и асинхронное - файлы. Две программы по очереди читают файлы, обрабатывают, пишут в новые файлы. Можно делать очереди, можно вешать любую из программ демоном и следить за появлением входящих данных. А можно и выключить любую из программ на день-неделю-месяц а потом запустить, обработать накопленную очередь и снова заснуть.
- Обмен данными через БД это разновидность вышеописанного подхода. Тоже можно, но чуть сложнее - надо знать АПИ используемой СУБД и иметь сервер этой СУБД.
- TCP/IP - можно и будет удобно, но требует чтобы обе программы были запущенны одновременно. Асинхронность теряется.
Это все будет работать в случае любого используемого языка и любой платформы.

Java в связке с C++: изучать JNI если смесь из двух языков действительно необходима. Но это в действительности очень редко нужно. Разве что при написании драйверов для какого-либо уникального железа. Все остальные задачи проще и надежней писать целиком на одном из языков.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337398
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не праильно назвал топик, надо было про WSDL и про ОРМы к БД, WSDL кажется есть в ВижлСтудии, попадался на глаза. Но компилить в ней библиотеки и бинарники для Убунты, это нормально?? Прошу прощения за такие вопросы =(
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337400
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________а для тисипи-айпи это надо Буст::Асио или АСЕ ..что бы руками не прописывать:
Код: plaintext
1.
int bind(int sockfd, struct sockaddr *addr, int addrlen);

А что плохого в прописывании руками? Вообще, не понимаю я страсти к Бусту. Оно конечно навороченное и местами удобное, но если библиотека мешает решать задачу - нафига цепляться за эту библиотеку?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337401
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlБезотносительно к языкам:
- Самое простое и асинхронное - файлы. Две программы по очереди читают файлы, обрабатывают, пишут в новые файлы. Можно делать очереди, можно вешать любую из программ демоном и следить за появлением входящих данных. А можно и выключить любую из программ на день-неделю-месяц а потом запустить, обработать накопленную очередь и снова заснуть.
- Обмен данными через БД это разновидность вышеописанного подхода. Тоже можно, но чуть сложнее - надо знать АПИ используемой СУБД и иметь сервер этой СУБД.
- TCP/IP - можно и будет удобно, но требует чтобы обе программы были запущенны одновременно. Асинхронность теряется.
Это все будет работать в случае любого используемого языка и любой платформы.

Java в связке с C++: изучать JNI если смесь из двух языков действительно необходима. Но это в действительности очень редко нужно. Разве что при написании драйверов для какого-либо уникального железа. Все остальные задачи проще и надежней писать целиком на одном из языков.

Золотые слова. Но заманился я на Спирит, нет в Яве такого простого и гибкого решения. А! и быстрого)))
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337406
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlБезотносительно к языкам:
- Самое простое и асинхронное - файлы. Две программы по очереди читают файлы, обрабатывают, пишут в новые файлы. Можно делать очереди, можно вешать любую из программ демоном и следить за появлением входящих данных. А можно и выключить любую из программ на день-неделю-месяц а потом запустить, обработать накопленную очередь и снова заснуть.
- Обмен данными через БД это разновидность вышеописанного подхода. Тоже можно, но чуть сложнее - надо знать АПИ используемой СУБД и иметь сервер этой СУБД.
- TCP/IP - можно и будет удобно, но требует чтобы обе программы были запущенны одновременно. Асинхронность теряется.
Это все будет работать в случае любого используемого языка и любой платформы.

Java в связке с C++: изучать JNI если смесь из двух языков действительно необходима. Но это в действительности очень редко нужно. Разве что при написании драйверов для какого-либо уникального железа. Все остальные задачи проще и надежней писать целиком на одном из языков.

А вот скажите, файлами ощутимо медленнее? Ведь они же на есткий диск пишутся, можно создавать их виртуально и без записи на винт, тогда не до большого будет тупить, верно?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337408
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________нет в Яве такого простого и гибкого решения. А! и быстрого)))

В яве вообще нет ничего быстрого. По определению.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337411
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется использовать профиты и явы и плюсов. Я наивен)) Но на С++ писать не буду, буду генерить код, тут взаимодействие через файлы самый простой вариант).. Быстрый?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337412
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Быстрый?
Нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337418
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkT_________Быстрый?
Нет.


Дмитрий, а как сделать быстро и не напряжно? Ненапряжно, т.е. генерить С++ код из шаблонов ..и именно что бы шаблоны были не оверхедные. Файлы прекрасный вариант, а так думаю в виртуальной файловой системе это быстро... но они после перезагрузки исчезнут)))
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337424
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________а как сделать быстро и не напряжно?
Нанять программиста.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337428
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________А вот скажите, файлами ощутимо медленнее? Ведь они же на есткий диск пишутся, можно создавать их виртуально и без записи на винт, тогда не до большого будет тупить, верно?Ощутимо медленнее по сравнению с чем? С прямым tcp/ip туннелем? Да, это будет намного медленнее. По сравнению с WSDL - скорее всего будет быстрее.
Зависит от того как ты файлы читать/писать собираешься. Если у тебя обе программы на одной машине и писать ты будешь на локальный диск это одно. А если программы на разных машинах и писать/читать ты будешь по сети через netbios или ftp - то это совершенно другое.
Главные плюсы файлового обмена: простота, надежность и универсальность. Главный минус: скорость.
Что перевесит в твоем случае - тебе решать.

А еще есть стандартные потоки. Они совмещают плюсы простоты доступа и скорости, но теряют асинхронность...
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337429
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlтеряют асинхронность...
Тут надо бы уточнить что именно автор понимает под "асинхронностью"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337438
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Добрый день.
Прошу поделиться опытом решения таких задач.

С одной стороны ява_код либо ява приложение, с другой стороны С++_код либо С++ приложение. Требуется со стороны С++ обрабатывать данные с потока вывода и передавать Яве(коду или приложению) и принимать данные от Ява (кода или приложения) всё надо делать асинхронно и кроссплатформенно(желательно) но можно и просто под Посикс.


Как бы прямой путь для этого -- CORBA.
Я такое делал, даже всё работало.
Но CORBA почему-то сейчас стала немодной, от неё все шарахаются как чёрт от ладана.
Хотя есть работающие бесплатные решения (ORB-ы) и для Java, и для C++.

автор варианты:

1.WSDL поделитесь историями успеха? есть библиотеки или как это прикрутить?


Наверное, всё же SOAP, WSDL -- это для описания сервисов, сами протоколы -- это SOAL/HTTP/TPC-IP.
Да, тоже можно. Я тоже такое делал на практике, в общем, это почти полный аналог решений на CORBA, толко руками и на спичках и изоленте. Работает примерно раза в 3-5 медленнее CORBA, но можно жать траффик, и не всегда скорость критична -- всё равно доли секунды.

автор2. Через БД, был опыт исопльзования МуСКЛ С++ АПИ, впечатление оставил неизгладимое, с учетом того что парсеров не мало, между собой они не связаны, придется писать ЦУП с пулами, которому каждый парсер будет отдавать/принимать инфу, но прогресс не стоит на месте, новые стандарты.. м б ОРМы есть, но чувствую это не самый простой вариант.


Это я вообще не понимаю как. Ты будешь записывать данные в БД только чтобы потом другая прога их прочитала и обработала ?
Нахрен такое надо ? БД очень медленные всегда, да и записывать чтобы только прочитать -- странно.

Тогда уж лучше делать сразу на Messaging-е, что-то типа ActiveMQ или Hornet.
Кстати, тоже решение, и кстати автоматом асинхронное.
Тоже делал (делаю вот прямо сейчас). И для C++, и для Java доступно.


автор3.Доменные сокеты Посикса, тсп-айпи, очереди.. и прочие артефакты из книг Стивенса)))


Ну это просто файлы, точнее -- потоки. Там у тебя не будет протоколов передачи данных, тебе придётся изобретать их самому.
Впрочем, их придётся изобретать самому в том или ином виде в любых случаях, кроме CORBA. B CORBA на самом деле тоже придётся изобретать на уровне IDL, а далее всё -- автоматом.

авторКоллеги, подскажите что в тренде, как передать данные межды С++ и Явой, асинхронно, кроссплатформенно, и без голавников со стороны плюсов.

В тренде -- я наверное посоветовал бы SOAP или Messaging.
Но SOAP вызов один -- строго синхронный. Асинхронным его тебе придётся делать самому, если это так надо. Messaging типа JMS/CMS -- наоборот, строго Асинхронный. Там наоборот чтобы сделать синхронно надо помучится (на самом деле это вообще невозможно, но возможна имитация).
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337443
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Dimitry Sibiryakovпропущено...

TCP или UDP - проще и кросплатформеннее всего.


ммм, ну как проще... по мне так WSDL проще всего, а для тисипи-айпи это надо Буст::Асио или АСЕ ..что бы руками не прописывать:
Код: plaintext
1.
int bind(int sockfd, struct sockaddr *addr, int addrlen);



не.. всё таки 2013 год. А там маршалинг/демаршалинг, и если куча парсеров то на удп, не буду же я 100500 портов открывать на тсп. Спасибо Вам. Но грусно как-то..

ACE -- это недоCORBA. Проблемы те же, а плюсов я и не знаю.
Уж лучше нормальный ORB взять.
И я не знаю, есть ли для ACE поддержка Java.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337445
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________
не.. всё таки 2013 год. А там маршалинг/демаршалинг, и если куча парсеров то на удп, не буду же я 100500 портов открывать на тсп.

Чего? Какой UDP и 100 тыщ портов ?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337446
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovWhite Owlтеряют асинхронность...
Тут надо бы уточнить что именно автор понимает под "асинхронностью"...


Это когда не получил, ответил, другой получил, другой ответил, а...


ответит, ответил, кто-то что-то получил, ещё, ещё.. вес для очередей, обработка чего-то срочного.. это не проблема написать.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337448
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Хочется использовать профиты и явы и плюсов. Я наивен)) Но на С++ писать не буду, буду генерить код, тут взаимодействие через файлы самый простой вариант).. Быстрый?

Какие профиты у Java ? Я бы на ней 200 лет бы не писал, если бы не нужно было...
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337450
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Хочется использовать профиты и явы и плюсов. Я наивен)) Но на С++ писать не буду, буду генерить код, тут взаимодействие через файлы самый простой вариант).. Быстрый?

Зачем, тогда уж через сокеты лучше...
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337453
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Dimitry Sibiryakovпропущено...

Тут надо бы уточнить что именно автор понимает под "асинхронностью"...
ответит, ответил, кто-то что-то получил, ещё, ещё.. вес для очередей, обработка чего-то срочного.. Тогда файлы хранимые на диске или маркированные блоки данных в БД - единственный вариант.
Скорость доступа к данным в этом случае уже становится абсолютно не важной.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337456
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tmpfs on /_files/fb/fb_temp_ram type tmpfs (rw,size=1024m)


типо того))
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337468
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ яве вообще нет ничего быстрого. По определению.Вот так включается HotSpot:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Mflops/s: 42.917  Time: 0.02 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 45.778  Time: 0.02 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 45.778  Time: 0.02 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 42.917  Time: 0.02 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 2147483.647  Time: 0.0 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 2147483.647  Time: 0.0 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 2147483.647  Time: 0.0 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 2147483.647  Time: 0.0 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
Mflops/s: 2147483.647  Time: 0.0 secs  Norm Res: 1.43  Precision: 2.220446049250313E-16
99ms

В данном конкретном случае надо переделывать подсчёт времени, но было лень и просто завернул цикл в System.nanoTime():
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
/*

Modified 3/3/97 by David M. Doolin (dmd) doolin@cs.utk.edu
Fixed error in matgen() method. Added some comments.

Modified 1/22/97 by Paul McMahan mcmahan@cs.utk.edu
Added more MacOS options to form.

Optimized by Jonathan Hardwick (jch@cs.cmu.edu), 3/28/96
Compare to Linkpack.java.
Optimizations performed:
 - added "final" modifier to performance-critical methods.
 - changed lines of the form "a[i] = a[i] + x" to "a[i] += x".
 - minimized array references using common subexpression elimination.
 - eliminated unused variables.
 - undid an unrolled loop.
 - added temporary 1D arrays to hold frequently-used columns of 2D arrays.
 - wrote my own abs() method
See http://www.cs.cmu.edu/~jch/java/linpack.html for more details.


Ported to Java by Reed Wade  (wade@cs.utk.edu) 2/96
built using JDK 1.0 on solaris
using "javac -O Linpack.java"


Translated to C by Bonnie Toy 5/88
  (modified on 2/25/94  to fix a problem with daxpy  for
   unequal increments or equal increments not equal to 1.
     Jack Dongarra)

*/


import java.net.*;
import java.io.*;
import java.util.*;


public class Linpack {

  public static void main(String[] args)
  {
    Linpack l = new Linpack();
    long nanoStart = System.nanoTime();
    for (int i = 0; i< 9; ++i) {
      l.run_benchmark();
    }
    System.err.print((System.nanoTime() - nanoStart + 500000)/1000000);
    System.err.println("ms");
  }

  final double abs (double d) {
    return (d >= 0) ? d : -d;
  }

  double second_orig = -1;

  double second()
  {
    if (second_orig==-1) {
      second_orig = System.currentTimeMillis();
    }
    return (System.currentTimeMillis() - second_orig)/1000;
  }

  public void run_benchmark() 
  {
    double mflops_result = 0.0;
    double residn_result = 0.0;
    double time_result = 0.0;
    double eps_result = 0.0;

    double a[][] = new double[200][201];
    double b[] = new double[200];
    double x[] = new double[200];
    double cray,ops,total,norma,normx;
    double resid,time;
    double kf;
    int n,i,ntimes,info,lda,ldaa,kflops;
    int ipvt[] = new int[200];
    
    //double mflops_result;
    //double residn_result;
    //double time_result;
    //double eps_result;

    lda = 201;
    ldaa = 200;
    cray = .056;
    n = 100;
    
    ops = (2.0e0*(n*n*n))/3.0 + 2.0*(n*n);
    
    norma = matgen(a,lda,n,b);
    time = second();
    info = dgefa(a,lda,n,ipvt);
    dgesl(a,lda,n,ipvt,b,0);
    total = second() - time;
    
    for (i = 0; i < n; i++) {
      x[i] = b[i];
    }
    norma = matgen(a,lda,n,b);
    for (i = 0; i < n; i++) {
      b[i] = -b[i];
    }
    dmxpy(n,b,n,lda,x,a);
    resid = 0.0;
    normx = 0.0;
    for (i = 0; i < n; i++) {
      resid = (resid > abs(b[i])) ? resid : abs(b[i]);
      normx = (normx > abs(x[i])) ? normx : abs(x[i]);
    }
    
    eps_result = epslon((double)1.0);
/*

    residn_result = resid/( n*norma*normx*eps_result );
    time_result = total;
    mflops_result = ops/(1.0e6*total);

    return ("Mflops/s: " + mflops_result +
	    "  Time: " + time_result + " secs" +
	    "  Norm Res: " + residn_result +
	    "  Precision: " + eps_result);
*/
	residn_result = resid/( n*norma*normx*eps_result );
	residn_result += 0.005; // for rounding
	residn_result = (int)(residn_result*100);
	residn_result /= 100;

	time_result = total;
	time_result += 0.005; // for rounding
	time_result = (int)(time_result*100);
	time_result /= 100;

	mflops_result = ops/(1.0e6*total);
	mflops_result += 0.0005; // for rounding
	mflops_result = (int)(mflops_result*1000);
	mflops_result /= 1000;

    System.out.println("Mflops/s: " + mflops_result +
	    "  Time: " + time_result + " secs" +
	    "  Norm Res: " + residn_result +
	    "  Precision: " + eps_result);
  }
  

  
  final double matgen (double a[][], int lda, int n, double b[])
  {
    double norma;
    int init, i, j;
    
    init = 1325;
    norma = 0.0;
/*  Next two for() statements switched.  Solver wants
matrix in column order. --dmd 3/3/97
*/
      for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
	init = 3125*init % 65536;
	a[j][i] = (init - 32768.0)/16384.0;
	norma = (a[j][i] > norma) ? a[j][i] : norma;
      }
    }
    for (i = 0; i < n; i++) {
      b[i] = 0.0;
    }
    for (j = 0; j < n; j++) {
      for (i = 0; i < n; i++) {
	b[i] += a[j][i];
      }
    }
    
    return norma;
  }
  

  
  /*
    dgefa factors a double precision matrix by gaussian elimination.
    
    dgefa is usually called by dgeco, but it can be called
    directly with a saving in time if  rcond  is not needed.
    (time for dgeco) = (1 + 9/n)*(time for dgefa) .
    
    on entry
    
    a       double precision[n][lda]
    the matrix to be factored.
    
    lda     integer
    the leading dimension of the array  a .
    
    n       integer
    the order of the matrix  a .
    
    on return
    
    a       an upper triangular matrix and the multipliers
    which were used to obtain it.
    the factorization can be written  a = l*u  where
    l  is a product of permutation and unit lower
    triangular matrices and  u  is upper triangular.
    
    ipvt    integer[n]
    an integer vector of pivot indices.
    
    info    integer
    = 0  normal value.
    = k  if  u[k][k] .eq. 0.0 .  this is not an error
    condition for this subroutine, but it does
    indicate that dgesl or dgedi will divide by zero
    if called.  use  rcond  in dgeco for a reliable
    indication of singularity.
    
    linpack. this version dated 08/14/78.
    cleve moler, university of new mexico, argonne national lab.
    
    functions
    
    blas daxpy,dscal,idamax
  */
  final int dgefa( double a[][], int lda, int n, int ipvt[])
  {
    double[] col_k, col_j;
    double t;
    int j,k,kp1,l,nm1;
    int info;
    
    // gaussian elimination with partial pivoting
    
    info = 0;
    nm1 = n - 1;
    if (nm1 >=  0) {
      for (k = 0; k < nm1; k++) {
	col_k = a[k];
	kp1 = k + 1;
	
	// find l = pivot index
	
	l = idamax(n-k,col_k,k,1) + k;
	ipvt[k] = l;
	
	// zero pivot implies this column already triangularized
	
	if (col_k[l] != 0) {
	  
	  // interchange if necessary
	  
	  if (l != k) {
	    t = col_k[l];
	    col_k[l] = col_k[k];
	    col_k[k] = t;
	  }
	  
	  // compute multipliers
	  
	  t = -1.0/col_k[k];
	  dscal(n-(kp1),t,col_k,kp1,1);
	  
	  // row elimination with column indexing
	  
	  for (j = kp1; j < n; j++) {
	    col_j = a[j];
	    t = col_j[l];
	    if (l != k) {
	      col_j[l] = col_j[k];
	      col_j[k] = t;
	    }
	    daxpy(n-(kp1),t,col_k,kp1,1,
		  col_j,kp1,1);
	  }
	}
	else {
	  info = k;
	}
      }
    }
    ipvt[n-1] = n-1;
    if (a[(n-1)][(n-1)] == 0) info = n-1;
    
    return info;
  }

  
  
  /*
    dgesl solves the double precision system
    a * x = b  or  trans(a) * x = b
    using the factors computed by dgeco or dgefa.
  
    on entry
  
    a       double precision[n][lda]
    the output from dgeco or dgefa.
  
    lda     integer
    the leading dimension of the array  a .
    
    n       integer
    the order of the matrix  a .
  
    ipvt    integer[n]
    the pivot vector from dgeco or dgefa.

    b       double precision[n]
    the right hand side vector.
    
    job     integer
    = 0         to solve  a*x = b ,
    = nonzero   to solve  trans(a)*x = b  where
    trans(a)  is the transpose.
    
    on return
    
    b       the solution vector  x .
    
    error condition
    
    a division by zero will occur if the input factor contains a
    zero on the diagonal.  technically this indicates singularity
    but it is often caused by improper arguments or improper
    setting of lda .  it will not occur if the subroutines are
    called correctly and if dgeco has set rcond .gt. 0.0
    or dgefa has set info .eq. 0 .
    
    to compute  inverse(a) * c  where  c  is a matrix
    with  p  columns
    dgeco(a,lda,n,ipvt,rcond,z)
    if (!rcond is too small){
    for (j=0,j<p,j++)
    dgesl(a,lda,n,ipvt,c[j][0],0);
    }
    
    linpack. this version dated 08/14/78 .
    cleve moler, university of new mexico, argonne national lab.
    
    functions
    
    blas daxpy,ddot
  */
  final void dgesl( double a[][], int lda, int n, int ipvt[], double b[], int job)
  {
    double t;
    int k,kb,l,nm1,kp1;

    nm1 = n - 1;
    if (job == 0) {

      // job = 0 , solve  a * x = b.  first solve  l*y = b

      if (nm1 >= 1) {
	for (k = 0; k < nm1; k++) {
	  l = ipvt[k];
	  t = b[l];
	  if (l != k){
	    b[l] = b[k];
	    b[k] = t;
	  }
	  kp1 = k + 1;
	  daxpy(n-(kp1),t,a[k],kp1,1,b,kp1,1);
	}
      }

      // now solve  u*x = y

      for (kb = 0; kb < n; kb++) {
	k = n - (kb + 1);
	b[k] /= a[k][k];
	t = -b[k];
	daxpy(k,t,a[k],0,1,b,0,1);
      }
    }
    else {

      // job = nonzero, solve  trans(a) * x = b.  first solve  trans(u)*y = b

      for (k = 0; k < n; k++) {
	t = ddot(k,a[k],0,1,b,0,1);
	b[k] = (b[k] - t)/a[k][k];
      }

      // now solve trans(l)*x = y 

      if (nm1 >= 1) {
	for (kb = 1; kb < nm1; kb++) {
	  k = n - (kb+1);
	  kp1 = k + 1;
	  b[k] += ddot(n-(kp1),a[k],kp1,1,b,kp1,1);
	  l = ipvt[k];
	  if (l != k) {
	    t = b[l];
	    b[l] = b[k];
	    b[k] = t;
	  }
	}
      }
    }
  }



  /*
    constant times a vector plus a vector.
    jack dongarra, linpack, 3/11/78.
  */
  final void daxpy( int n, double da, double dx[], int dx_off, int incx,
	      double dy[], int dy_off, int incy)
  {
    int i,ix,iy;

    if ((n > 0) && (da != 0)) {
      if (incx != 1 || incy != 1) {

	// code for unequal increments or equal increments not equal to 1

	ix = 0;
	iy = 0;
	if (incx < 0) ix = (-n+1)*incx;
	if (incy < 0) iy = (-n+1)*incy;
	for (i = 0;i < n; i++) {
	  dy[iy +dy_off] += da*dx[ix +dx_off];
	  ix += incx;
	  iy += incy;
	}
	return;
      } else {

	// code for both increments equal to 1

	for (i=0; i < n; i++)
	  dy[i +dy_off] += da*dx[i +dx_off];
      }
    }
  }



  /*
    forms the dot product of two vectors.
    jack dongarra, linpack, 3/11/78.
  */
  final double ddot( int n, double dx[], int dx_off, int incx, double dy[],
	       int dy_off, int incy)
  {
    double dtemp;
    int i,ix,iy;

    dtemp = 0;

    if (n > 0) {
      
      if (incx != 1 || incy != 1) {

	// code for unequal increments or equal increments not equal to 1

	ix = 0;
	iy = 0;
	if (incx < 0) ix = (-n+1)*incx;
	if (incy < 0) iy = (-n+1)*incy;
	for (i = 0;i < n; i++) {
	  dtemp += dx[ix +dx_off]*dy[iy +dy_off];
	  ix += incx;
	  iy += incy;
	}
      } else {

	// code for both increments equal to 1
	
	for (i=0;i < n; i++)
	  dtemp += dx[i +dx_off]*dy[i +dy_off];
      }
    }
    return(dtemp);
  }

  
  
  /*
    scales a vector by a constant.
    jack dongarra, linpack, 3/11/78.
  */
  final void dscal( int n, double da, double dx[], int dx_off, int incx)
  {
    int i,nincx;

    if (n > 0) {
      if (incx != 1) {

	// code for increment not equal to 1

	nincx = n*incx;
	for (i = 0; i < nincx; i += incx)
	  dx[i +dx_off] *= da;
      } else {

	// code for increment equal to 1

	for (i = 0; i < n; i++)
	  dx[i +dx_off] *= da;
      }
    }
  }

  
  
  /*
    finds the index of element having max. absolute value.
    jack dongarra, linpack, 3/11/78.
  */
  final int idamax( int n, double dx[], int dx_off, int incx)
  {
    double dmax, dtemp;
    int i, ix, itemp=0;

    if (n < 1) {
      itemp = -1;
    } else if (n ==1) {
      itemp = 0;
    } else if (incx != 1) {

      // code for increment not equal to 1

      dmax = abs(dx[0 +dx_off]);
      ix = 1 + incx;
      for (i = 1; i < n; i++) {
	dtemp = abs(dx[ix + dx_off]);
	if (dtemp > dmax)  {
	  itemp = i;
	  dmax = dtemp;
	}
	ix += incx;
      }
    } else {

      // code for increment equal to 1

      itemp = 0;
      dmax = abs(dx[0 +dx_off]);
      for (i = 1; i < n; i++) {
	dtemp = abs(dx[i + dx_off]);
	if (dtemp > dmax) {
	  itemp = i;
	  dmax = dtemp;
	}
      }
    }
    return (itemp);
  }


  
  /*
    estimate unit roundoff in quantities of size x.
    
    this program should function properly on all systems
    satisfying the following two assumptions,
    1.  the base used in representing dfloating point
    numbers is not a power of three.
    2.  the quantity  a  in statement 10 is represented to
    the accuracy used in dfloating point variables
    that are stored in memory.
    the statement number 10 and the go to 10 are intended to
    force optimizing compilers to generate code satisfying
    assumption 2.
    under these assumptions, it should be true that,
    a  is not exactly equal to four-thirds,
    b  has a zero for its last bit or digit,
    c  is not exactly equal to one,
    eps  measures the separation of 1.0 from
    the next larger dfloating point number.
    the developers of eispack would appreciate being informed
    about any systems where these assumptions do not hold.
    
    *****************************************************************
    this routine is one of the auxiliary routines used by eispack iii
    to avoid machine dependencies.
    *****************************************************************
  
    this version dated 4/6/83.
  */
  final double epslon (double x)
  {
    double a,b,c,eps;

    a = 4.0e0/3.0e0;
    eps = 0;
    while (eps == 0) {
      b = a - 1.0;
      c = b + b + b;
      eps = abs(c-1.0);
    }
    return(eps*abs(x));
  }

  

  /*
    purpose:
    multiply matrix m times vector x and add the result to vector y.
    
    parameters:
    
    n1 integer, number of elements in vector y, and number of rows in
    matrix m
    
    y double [n1], vector of length n1 to which is added
    the product m*x
    
    n2 integer, number of elements in vector x, and number of columns
    in matrix m
    
    ldm integer, leading dimension of array m
    
    x double [n2], vector of length n2
    
    m double [ldm][n2], matrix of n1 rows and n2 columns
  */
  final void dmxpy ( int n1, double y[], int n2, int ldm, double x[], double m[][])
  {
    int j,i;

    // cleanup odd vector
    for (j = 0; j < n2; j++) {
      for (i = 0; i < n1; i++) {
	y[i] += x[j]*m[j][i];
      }
    }
  }

}

...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337470
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парни, огромное Вам спасибо! Очень доходчиво и в красках. Беру файлы в tmpfs и CMS.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337476
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНо CORBA почему-то сейчас стала немодной, от неё все шарахаются как чёрт от ладанаДык - "Сложно" :)

P.S. Сегодня долго вкуривал helper-ы и holder-ы, но зато стало ясно как улучшить то, что есть.
Может даже и "быстрее" будет, чем прежний вариант рефакторинга, хотя ощущение некоторой замороченности - осталось :)
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337791
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________,

Я бы выбрал SOAP. Во всяком случае, если ты задумываешься о масштабируемости (например, предполагаешь, что возникнет в будущем необходимость разнести клиента (Java) и сервис (С++)), то файлы будут сдерживающим фактором.

Для реализации SOAP сервиса на С++ можешь посмотреть в сторону gSOAP ( http://gsoap2.sourceforge.net/).
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337817
sherzod_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Добрый день.
Прошу поделиться опытом решения таких задач.

С одной стороны ява_код либо ява приложение, с другой стороны С++_код либо С++ приложение. Требуется со стороны С++ обрабатывать данные с потока вывода и передавать Яве(коду или приложению) и принимать данные от Ява (кода или приложения) всё надо делать асинхронно и кроссплатформенно(желательно) но можно и просто под Посикс.

В Ява ветке пишут что нет возможности использовать Буст::Спирит из JNI, (да, со стороны С++ либо код Спирита, либо скомпилинный код), т.е. если код не вызвать (и нужно ли? там наверно жудкие тормоза) значить компилить парсеры, считывать поток вывода и как то его отдавать Ява приложению, варианты:

1.WSDL поделитесь историями успеха? есть библиотеки или как это прикрутить?
2. Через БД, был опыт исопльзования МуСКЛ С++ АПИ, впечатление оставил неизгладимое, с учетом того что парсеров не мало, между собой они не связаны, придется писать ЦУП с пулами, которому каждый парсер будет отдавать/принимать инфу, но прогресс не стоит на месте, новые стандарты.. м б ОРМы есть, но чувствую это не самый простой вариант.
3.Доменные сокеты Посикса, тсп-айпи, очереди.. и прочие артефакты из книг Стивенса)))

Коллеги, подскажите что в тренде, как передать данные межды С++ и Явой, асинхронно, кроссплатформенно, и без голавников со стороны плюсов. Благодарю!

Какое сборище модно-бесполезных терминов. Еще не хватает обязательного слова "энтерпрайз". И совершенно не понятно какое boost::spirit (библиотека DSL для создания не самых быстрых, простых парсеров) имеет отношение к ipc. Еще судя по вашему посту, не понятно что вы хотите, какое именно взаимодействие. Поэтому вам начали советовать совершенно различные вещи начиная от пайпов, файлов заканчивая SOAP-ом.

То что вы называете "передавать данные между двумя приложениями" может иметь абсолютно различные виды. Например сюда можно засунуть следующие: browser<->webserver, dbclient <->dbserver, главный процесс - порожденные процессы для обслуживания подключений, и уйма других видов, каждый из которых имеет свои требования (скорость, надежность, персистентность, сессионность, кол-во подключений, транзакционность, и мн. др.)

Чтобы получить правильные советы, нужно дать четкую постановку задачи.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337887
MasterZivВ тренде -- я наверное посоветовал бы SOAP или Messaging.
А в чем вообще преимущества этого SOAP помимо тренда по сравнению с передачей по TCP-IP данных сериализованных любым способом?
SOAP по сути это передача данных в XML-формате поверх прикладного протокола. Чем это лучше, чем передача XML по TCP-IP или чем передача не-XML по TCP-IP, тем что обеспечивается прямая совместимость при добавлении новых параметров в XML?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337909
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в чем преимущества SOAP?,

Ну, во-первых это стандарт, во-вторых при написании клиента тебе остается сгенерить STUB по WSDL для целевой платформы, чтобы система "заиграла". А так, конечно, можно и самопал - никто не запрещает.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38337989
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широковв чем преимущества SOAP?,

Ну, во-первых это стандарт, во-вторых при написании клиента тебе остается сгенерить STUB по WSDL для целевой платформы, чтобы система "заиграла". А так, конечно, можно и самопал - никто не запрещает.
согласен, с сетью кода больше руками писать, даже если его и генерить а не писать ;)

Мне понравился вариант через очереди ActiveMQ либы для плюсов прикрутил, ночью хелловорд попробую в яву отправить. Файлы во временной ФС как план Б)))
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38338509
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________Анатолий Широковв чем преимущества SOAP?,

Ну, во-первых это стандарт, во-вторых при написании клиента тебе остается сгенерить STUB по WSDL для целевой платформы, чтобы система "заиграла". А так, конечно, можно и самопал - никто не запрещает.
согласен, с сетью кода больше руками писать, даже если его и генерить а не писать ;)

Мне понравился вариант через очереди ActiveMQ либы для плюсов прикрутил, ночью хелловорд попробую в яву отправить. Файлы во временной ФС как план Б)))

Там примеров дофига в библиотеках AMQ-шных.
Доаументация как бы не очень хорошая, но зато примеры правильные и много.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38338512
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в чем преимущества SOAP?MasterZivВ тренде -- я наверное посоветовал бы SOAP или Messaging.
А в чем вообще преимущества этого SOAP помимо тренда по сравнению с передачей по TCP-IP данных сериализованных любым способом?
SOAP по сути это передача данных в XML-формате поверх прикладного протокола. Чем это лучше, чем передача XML по TCP-IP или чем передача не-XML по TCP-IP, тем что обеспечивается прямая совместимость при добавлении новых параметров в XML?

Совместимость чего с чем ? Старой версии программы с новой ? Её не будет даже в SOAP, на сколько я помню.

А так, HTTP даёт дополнительно возможность шифрации и сжатия, задаёт собственно протокол обмена (при работе через TCP его нужно делать самому или брать готовый, типа STOMP или XMPP), возможности задавать параметры и возможность аутентификации.

SOAP сверху по сравнению с голым XML даёт в общем мало чего, там какие-то общесистемные служебные возможности, не помню.
Но главное от SOAP -- это возможность генерации автоматической кода по маршалингу/демаршалингу XML-я. Хотя её наверное можно прикрутить руками и в случае использования чистого XML, только вот вопрос -- зачем?
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38339011
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АктивМКу, ода! Примеров много, документацию особо не глядел. Примеры душевные, но установка долгоиграющая. Ставил активмку-спп часть много зависимостей ..пути к заголовкам, библиотекам - сурово для Убунту(((, сам сервис - пользователи, права, папки..куча конфигов. Норм, работает.Спасибо за совет.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38339015
kT_________
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kT_________АктивМКу, ода! Примеров много, документацию особо не глядел. Примеры душевные, но установка долгоиграющая. Ставил активмку-спп часть много зависимостей ..пути к заголовкам, библиотекам - сурово для Убунту(((, сам сервис - пользователи, права, папки..куча конфигов. Норм, работает.Спасибо за совет.

Больше одного конфига уже куча;)
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38339546
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkT_________нет в Яве такого простого и гибкого решения. А! и быстрого)))

В яве вообще нет ничего быстрого. По определению.


Это миф из девяностых.

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

Сегодняшняя ява идентичный с плюсами код компилит в идентичный же асм, в этом можно убедиться, запустив jvm с плагином hdis. Единственное большое отличие си - соглашения о передаче параметров через стек. Изза этого в си сильно убивается производительность на рекурсивных программах типа факториала и ява работает раза в 3 быстрей. Во всех остальных случаях асм весьма оптимален -> скорость идентична. Т.е. я хочу сказать, что на сегодня 99% тормозов связаны с говнокодом, который есть и в плюсовых и в явовских либах.

и мой реальный опыт это подтверждает. Написав говняную либу "правильно" ее можно разгнать во много раз. Лично я порвал json_spirit раз в 100 по производительности своим парсером на яве.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38339842
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это миф из девяностых.

Ну в общем да...

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


Почему же не могут? Могут, и делают...
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38340574
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok,

плюсы умеют инлайнить больше чем ты просишь, в том числе и тела библиотечных функций.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38341136
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широковплюсы умеют инлайнить больше чем ты просишь, в том числе и тела библиотечных функций.JIT может не только встроить то, что можно встроить "прям щас", но и отменить встраивание, если ситуация изменилась. Прямо в процессе исполнения.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38341292
kamre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chabapokНаписав говняную либу "правильно" ее можно разгнать во много раз.
А можно для примера какую-нибудь не "говняную" либу (или уже разогнанную) для комплексных чисел (или там двух/трехмерных векторов)? Чтобы операции с большими массивами этих комплексных чисел (векторов) по скорости не уступали C++, где все данные будут одним куском лежать без лишней косвенности.
...
Рейтинг: 0 / 0
Межпроцесное взаимодействие с Ява приложением или кодом.
    #38341336
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
холивор "Производительность Java vs C++" - заканчиваем.
Следующие сообщения на эту тему будут убиваться.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Межпроцесное взаимодействие с Ява приложением или кодом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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