Kotlin / Quasar Fiber Предупреждение и выход

Я изучаю Kotlin и Quasar и пытаюсь сделать игру "Boom". Я думаю, что мой код хорош, но когда я выполняю, это дает is hogging the CPU or blocking a thread. предупреждение или просто выйти, иногда.

Я сделал что-то не так или нет?

суть

Редактировать: полный вывод

1 ответ

Решение
  1. Поскольку вы порождаете актеров, но не присоединяетесь к ним из основного потока, последний может выйти до того, как первый завершит выполнение. Посмотрите на LocalActor.join.
  2. Если вы присоединитесь к обоим акторам, ваша программа будет зависать при сбое одного, потому что другой будет ждать сообщения вечно. Отправьте сообщение о выходе другому субъекту, если произошел сбой, или используйте прием с тайм-аутом и выйдите, если произошел тайм-аут.
  3. Предупреждение совершенно нормально, потому что среда выполнения Quasar и JVM все еще "прогреваются" во время выполнения вашей программы, поэтому, например, в вашей трассировке Quasar выполняет однократные операции по блокировке потоков при проверке приостановленных аннотаций. Здесь вместо этого я получил его во время печати на стандартном выводе (который является операцией блокировки потока), предположительно, потому что JVM еще не оптимизировала этот путь к коду (возможно, он все еще выполнял его в интерпретируемом режиме). Вы можете отключить это предупреждение, если хотите с co.paralleluniverse.fibers.detectRunawayFibers системное свойство.
Другие вопросы по тегам