Сценарий:
У меня есть IPC на основе распределенных объектов между приложением Mac и демоном launchd (написанным с помощью классов Foundation). Поскольку раньше у меня были проблемы с асинхронным обменом сообщениями (например, у меня есть registerClient: на корневом объекте сервера и всякий раз, когда происходит событие, корневой объект сервера уведомляет / вызывает метод в прокси-объекте клиента), я выполнил длинный опрос, который означал, что клиент "собирает" списки событий / уведомлений от демона. Этот "сбор" выполняется с помощью вызова метода объекта сервера, который затем возвращает экземпляр NSArray.
Это работает довольно хорошо, пока в течение нескольких секунд процесс объекта сервера (запущенный через launchd) не будет помечен красным с тегом "(Не отвечает)" рядом с ним (внутри Activity Monitor). Как я уже сказал, функционально это работает хорошо, но мы просто хотим избавиться от этого ярлыка «Не отвечает».
Как я могу предотвратить этот тег "Не отвечает"?
К вашему сведению, я уже делал процессы, основанные на запуске, и это первый раз, когда я проводил длинный опрос. Кроме того, я попробовал соединения на основе NSSocketPortNameServer, а также соединения на основе NSSocketPort. У них не было этой проблемы. Блокировка не была также проблемой, потому что используемые блокировки были только NSCondition, и мы зарегистрировали и отладили программу, и кажется, что единственная проблема блокировки связана с частью сбора, которая фактически работает функционально. Кроме того, клиентский процесс написан на PyObjC, а серверный процесс написан на ObjC.
Заранее спасибо.