Общие сведения о взаимодействии ядра и внешнего интерфейса - Почему мой внешний интерфейс зависает?

РЕДАКТИРОВАТЬ: Было бы полезно просто подтвердить, можете ли вы воспроизвести это или нет. Чтобы попробовать это, нужен только один компьютер (удаленное подключение не требуется).

Обновление Похоже, что другие не могут воспроизвести это на Mac или Win7, так что это либо для WinXP, либо для моей машины. На этом я сдаюсь.


Было бы хорошо иметь руководство о том, как взаимодействуют интерфейс и ядро, чтобы мы могли отлаживать удаленные проблемы с ядром. Любые такие общие ответы (или ссылки на руководства в другом месте) приветствуются. Мне уже известно о Стратегиях удаленного ядра Саши Кратки.

Теперь практический вопрос: Когда я подключаюсь к удаленной машине каким-либо образом (например, используя стратегии удаленного ядра), интерфейс рано или поздно зависает.Как я могу предотвратить это?

Вот как воспроизвести проблему на одной машине (удаленное соединение не требуется):

  1. Создайте новую конфигурацию ядра (меню «Оценка» -> Параметры конфигурации ядра ...)

    Выберите Расширенные настройки.

    Аргументы для MLOpen:

     -LinkName "8000 @ YOUR-IP-HERE, 8001 @ YOUR-IP-HERE" -LinkMode Listen
    -LinkProtocol TCPIP -LinkHost "ВАШ-IP-ЗДЕСЬ" -LinkOptions MLDontInteract
    

    (Замените ВАШ-IP-ЗДЕСЬ IP-адресом вашего компьютера. В Windows вы можете получить это, набрав ipconfig в командном окне.)

    Команда оболочки для запуска ядро: оставьте пустым (мы сделаем это вручную)

  2. Откройте новую записную книжку, установите ядро ​​записной книжки на то, которое вы только что настроили, и оцените что-нибудь ( 1 + 1 ).

  3. Теперь нам нужно запустить ядро ​​вручную до истечения времени ожидания соединения. Итак, запустите новое ядро ​​( math ) в режиме командной строки и оцените следующее:

     link = LinkConnect ["8000,8001", LinkProtocol -> "TCPIP"] (* подключитесь к интерфейсу ссылка *)
    
    $ ParentLink = ссылка; (* установить внешнюю ссылку как родительскую *)
    

    Теперь соединение установлено, и все работает правильно (за исключением одного сообщения в розовом окне сообщения интерфейса).

  4. Evaluate Manipulate [n, {n, 0, 100, 1}] . Во-первых, это тоже работает. Теперь поиграйте с ползунком. Рано или поздно фронтенд замерзнет и его нужно будет убить. Для меня всегда достаточно перетаскивать ползунок вверх и вниз в течение ~ 10 секунд, не отпуская его.

Почему внешняя часть зависает? Как я могу создать соединение в режиме TCPIP между клиентской частью и ядром, чтобы все работало правильно?


Некоторые примечания:

  • I ' м в Windows XP.
  • Проблема никогда не возникает, если я использую LinkProtocol -> «SharedMemory» .
  • Прерывание вычислений с использованием «Оценка -> Прервать оценку» работает правильно.
  • С помощью Links [] я подтвердил, что созданы MathLink` $ PreemptiveLink и MathLink` $ ServiceLink и LinkConnectedQ [] возвращает True для них.

Опять же, обратите внимание, что Front End зависнет только после перетаскивания ползунка Manipualate в течение нескольких секунд, не отпуская его.

Ссылка на тот же вопрос на MathGroup.

Связано: Настройки брандмауэра для работы удаленного ядра (Mathematica)

7
задан 13 revs 23 May 2017 в 10:08
поделиться