用过 skynet 的应该都碰到过:当我们在服务中不小心调用了一个长时间运行而不返回的 C 函数,会独占一个工作线程。同时,这个被阻塞的服务也无法处理新的消息。一旦这种情况发生,看似是无解的。我们通常认为,是设计问题导致了这种情况发生。skynet 的框架在监测到这种情况发生时,会输出 maybe in an endless loop 。
如果是 Lua 函数产生的死循环,可以通过发送 signal 打断正在运行运行的 Lua 虚拟机,但如果是陷入 C 函数中,只能事后追查 bug 了。
那么,如果我原本就预期一段 C 代码会运行很长时间,有没有可能从底层支持以非阻塞方式运行这段代码呢?即,在这段代码运行期间,该服务还可以接收并处理新的消息?
Windows Defender (WD) 是一款集成于 Windows 10 和 11 中的恶意软件防护产品。随着时间的推移,WD在与Windows在发展过程中展现出了其在检测和阻止个人计算机不同类型的恶意软件的有效性。在本文中,我们将探讨WD使用的数据库结构(CSDL),以提取其中的数据以更深入了解该CSDL的格式以及其中的一些识别标志类型。