|
|
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
Имеется контроллер с флеш памятью. По протоколу UDP передаются данные в контроллер для записи. При получении посланного мною пакета обратно отправляется квитанция. Пакеты отправляются и данные записываются. Проблема в том, что данная операция является очень затратной по времени, а именно от отправления пакета до получения квитанции. Имеется предположение, что где-то в недрах функции receive, класса DatagramSocket, имеется некий таймаут, из-за которого происходит некоторое торможение. Может кто-то сталкивался с данной ситуацией? Возможно ли получить пакет не с помощью класса DatagramSocket? Если да, то как? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 08:22 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
Konstantin1706, боюсь, что тут проблема не в датаграмме, т.к. квитанцию отправляет контроллер. А таймаут в слушателе проверил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 09:00 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
таймаут упоминается в socketReceiveOrPeekData класса DualStackPlainDatagramSocketImpl, но посмотреть его значение не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 11:13 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
Konstantin1706, можно посмотреть исходники DatagramSocket и узнать как он внутри устроен. Но вряд-ли это даст пользу. JDK достаточно хорошо оптимизирована чтобы не замечать подобные вещи. Я-бы померял время между завершением приёма пакета в контроллере и завершением выдачи квитанции. Это время может в 10,100 или 1000 крат превышать накладные расходы на обработку receive. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 12:53 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
Дело в том, что та же самая операция, только написана на С, выполняется в десятки раз быстрее. Контроллер обрабатывает пакеты достаточно быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 13:43 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
Лучше тогда смотреть в код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 14:21 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
повторюсь, есть ли возможность получать пакеты не через DatagramSocket? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 14:33 |
|
||
|
Затратная по времени операция записи в память контроллера
|
|||
|---|---|---|---|
|
#18+
IMHO Тут два решения: 1. Трассировать, разбираться. Раз есть эталонный и хорошо работающий код на C, пытаться понять, чем алгоритм в Java отличается 2. Оформить хорошо работающий C-код как native library и юзать его 1. А автор не так уж не прав.... https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/solaris/native/java/net/PlainDatagramSocketImpl.c не очень понятный мне вызов ф-ции NET_TimeOut. Не очень понятно, как оно реализовано (с ходу в google нашел только реализацию для FreeBSD). Но в любом случае, как я понимаю, никто не мешает ее отключить. Дабы ее вызов и обработка сидит в if. Только, вроде 0 это значение по умолчанию для timeout. 2. Еще более чудесатей net_util_md.h Вроде NET_TimeOut реализовано только для Linux. На Windows вместо него используется JVM_TimeOut. Исходников не нашел. Вообще, интересная тема. У меня тоже претензии к Java по скорости обмена по сети были ((( Но я тогда глубоко копать не стал. Проблема была решена, деньги мне заплатили, надежды на нормальный стенд умерли. Техники для экспериментов не было ((( IMHO как-то больно мудрено нативный код написан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2014, 15:41 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=148&tid=2126107]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
329ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 671ms |

| 0 / 0 |
