2016-02-01 2 views
1

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

Я сделал что-то неправильно или нет?

gist

Edit: full output

+0

У вас есть -javaagent? – IRus

+0

Да, нам нужна задача агента или сборки для инструментария AFAIK. Он работает около 3/5 раз отлично, но 2/5 я получаю предупреждение или неожиданно завершу – Hyperion

+0

Я могу предложить посмотреть демо на github с веб-семинара: http://blog.jetbrains.com/kotlin/2015/09/ webinar-record-quasar-effective-and-elegant-fiber-channels-and-actors/ – IRus

ответ

1
  1. Поскольку вы нерест актеров, но не присоединиться к ним от основного потока, последний может выйти до того, как бывший закончить выполнение. Посмотрите на LocalActor.join.
  2. Если вы присоединитесь к обоим актерам, ваша программа будет зависать, если вы потерпите неудачу, потому что другой будет ждать сообщения навсегда. Отправляйте сообщение выхода другому игроку при сбое или использовании приема с тайм-аутом и выйдите, если произойдет таймаут.
  3. Предупреждение совершенно нормально, поскольку время выполнения Quasar и JVM все еще «разогреваются» во время выполнения вашей программы, так что, например, в вашей трассировке Quasar выполняет одноразовые операции блокировки потоков при проверке ваших подстановочных аннотаций. Здесь вместо этого я получил его при печати на stdout (который является операцией блокировки потоков), предположительно потому, что JVM еще не оптимизировал этот путь кода (вероятно, он все еще запускал его в интерпретируемом режиме). Вы можете отключить это предупреждение, если хотите with the co.paralleluniverse.fibers.detectRunawayFibers system property.
+0

Thx много! Я присоединяюсь к одному из моих актеров и отключаю обнаружениеRunawayFibers – Hyperion

Смежные вопросы