Kotlin / Quasar Fiber Предупреждение и выход
Я изучаю Kotlin и Quasar и пытаюсь сделать игру "Boom". Я думаю, что мой код хорош, но когда я выполняю, это дает is hogging the CPU or blocking a thread.
предупреждение или просто выйти, иногда.
Я сделал что-то не так или нет?
Редактировать: полный вывод
1 ответ
Решение
- Поскольку вы порождаете актеров, но не присоединяетесь к ним из основного потока, последний может выйти до того, как первый завершит выполнение. Посмотрите на LocalActor.join.
- Если вы присоединитесь к обоим акторам, ваша программа будет зависать при сбое одного, потому что другой будет ждать сообщения вечно. Отправьте сообщение о выходе другому субъекту, если произошел сбой, или используйте прием с тайм-аутом и выйдите, если произошел тайм-аут.
- Предупреждение совершенно нормально, потому что среда выполнения Quasar и JVM все еще "прогреваются" во время выполнения вашей программы, поэтому, например, в вашей трассировке Quasar выполняет однократные операции по блокировке потоков при проверке приостановленных аннотаций. Здесь вместо этого я получил его во время печати на стандартном выводе (который является операцией блокировки потока), предположительно, потому что JVM еще не оптимизировала этот путь к коду (возможно, он все еще выполнял его в интерпретируемом режиме). Вы можете отключить это предупреждение, если хотите с
co.paralleluniverse.fibers.detectRunawayFibers
системное свойство.