设想:
我在 mac 应用程序和 launchd 守护程序(用 Foundation 类编写)之间有一个基于分布式对象的 IPC。由于我之前遇到过关于异步消息传递的问题(例如,我有一个 registerClient: 在服务器的根对象上,并且每当发生事件时服务器的根对象通知/调用客户端代理对象中的方法),我进行了长轮询,这意味着客户端“收获”来自守护进程的事件/通知列表。这种“收获”是通过服务器对象方法调用完成的,然后返回一个 NSArray 实例。
它工作得很好,直到几秒钟后,服务器对象的进程(通过 launchd 启动)开始被标记为红色,旁边有“(未响应)”标签(在活动监视器内)。就像我说的,在功能上,它运作良好,但我们只是想摆脱这个“不响应”的标签。
如何防止出现此“未响应”标签?
仅供参考,我之前已经做过基于启动的流程,这是我第一次进行长轮询。此外,我尝试了基于 NSSocketPortNameServer 的连接以及基于 NSSocketPort 的连接。他们没有这个问题。锁定也不是问题,因为使用的锁只是 NSCondition 的,我们记录并调试了程序,似乎唯一的锁定“问题”在收获部分,实际上,在功能上有效。此外,客户端进程是用 PyObjC 编写的,而服务器进程是使用 ObjC 编写的。
提前致谢。