Erlang: приоритет получает

attempt to set or access a value of type java.lang.Object using a local variable of type int

Похоже, что в некоторых местах ProGuard оптимизирует распределение переменных, но делает это неправильно.

Попробуйте отключить эту оптимизацию, добавив строку ниже в вашем proguard-rules.pro:

-optimizations !code/allocation/variable

6
задан Laurel 5 May 2016 в 19:47
поделиться

4 ответа

Вкл (1): Можно ли сделать это предположение, зависит от деталей вашей ситуации. Например, все другие процессы, возможно, ждали, что что-то произойдет, прежде чем отправлять вам свои сообщения.

On (2): На самом деле, мне кажется, что в худшем случае будут сообщения с приоритетом no , так как почтовый ящик придется обходить каждый раз: «Пришло ли приоритетное сообщение?»

4
ответ дан 10 December 2019 в 00:43
поделиться

Erlang being a radically concurrent language, there's no reason you couldn't have been sent several messages at the exact same time. Making assumptions along the lines of "Oh, this is fast -- it's so unlikely other threads would do something that conflicts in that little time" is essentially the same thing as closing your eyes and saying "There's no such thing as race conditions, there's no such thing as race conditions..."

5
ответ дан 10 December 2019 в 00:43
поделиться

Согласно справочному руководству по Erlang, прием проходит через почтовый ящик во времени. и блокируется до тех пор, пока сообщение не будет соответствовать одному из пунктов.

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

Слишком много выходов из этого затруднительного положения - это добавление нового предложения after во внутреннем приеме. Или всегда совпадать во внутреннем приеме.

Хотя, глядя на их функцию, внутреннее предложение всегда должно совпадать, но я предполагаю, что это то, о чем они говорили.

1
ответ дан 10 December 2019 в 00:43
поделиться

Выделенное вами утверждение просто говорит о том, что если вы находитесь во внутреннем блокирующем блоке приема, вы можете обработать сообщение с низким приоритетом перед сообщением с высоким приоритетом (поскольку вы сопоставляете все), что не обязательно намерение.

Это немного крайний случай - я обнаружил, что важна эффективная обработка сообщений, когда вам нужна какая-то фильтрация. В других случаях я также отслеживал глубину очереди процессов и соответственно менял свою стратегию. В качестве примера последнего можно привести простой процесс типа logg gen_server (который использовал преобразование для отправки сообщения журнала), поскольку запись сообщений журнала на диск может быть намного медленнее, чем отправка сообщений в процесс.

0
ответ дан 10 December 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: