场景:
我在 mac 应用程序和 launchd 守护进程(用基础类编写)之间有一个基于分布式对象的 IPC。由于我之前遇到过有关异步消息传递的问题(例如,我有一个 registerClient: 在服务器的根对象上,只要有事件发生,服务器的根对象就会通知/调用客户端代理对象中的方法),我做了长轮询,这意味着客户端从守护进程“收获”事件/通知列表。这种“收获”是通过服务器对象方法调用完成的,然后返回一个 NSArray 实例。
它工作得很好,直到几秒钟后,服务器对象的进程(通过 launchd 启动)开始被标记为红色,旁边带有“(未响应)”标签(在事件监视器内)。就像我说的,在功能上,它运作良好,但我们只是想摆脱这个“无响应”标签。
我怎样才能阻止这个“不响应”标签?
仅供引用,我之前已经做过基于启动的进程,这是我第一次做长轮询。此外,我尝试了基于 NSSocketPortNameServer 的连接以及基于 NSSocketPort 的连接。他们没有这个问题。锁定也不是一个问题,因为使用的锁只是 NSCondition 的,我们记录并调试了程序,似乎唯一的锁定“问题”是在收获部分,实际上,它在功能上是有效的。此外,客户端进程是用 PyObjC 编写的,而服务器进程是使用 ObjC 编写的。
提前致谢。
最佳答案
Sample找出它正在做什么或正在等待什么的过程。
关于objective-c - Cocoa 分布式对象,长轮询,launchd 和 Activity Monitor 中的 "Not Responding",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1044039/