第十四章 创建Callout Library - 故障排除和错误

2024-01-03  本文已影响0人  Cache技术分享

第十四章 创建Callout Library - 故障排除和错误处理

最糟糕的做法

尽管可以使用 $ZF Callout Interface 调用几乎任何例程,但它最适合用于数学函数。它还可以有效地用作 IRIS I/O 无法很好处理的外部设备的接口,或者用于 IRIS 接口不存在的某些系统服务。

以下操作可能会导致严重问题:

内存访问违规将由 IRIS 处理,并将被视为 IRIS 中的错误。

由陷阱处理的错误(例如大多数平台上的除零错误)也将被视为 IRIS 中的错误。

IRIS 需要与运行 IRIS 的其他进程进行交互。降低优先级和提高优先级一样糟糕。例如,假设进程在放弃 CPU 之前获取了自旋锁保护的资源。如果优先级太低,其他具有更高优先级的进程可能会争夺资源,从而有效地阻止进程运行,从而释放自旋锁。

可以非常简单地屏蔽中断以实现自己的互锁,但应该非常小心,不要在任何时间段内都屏蔽中断。

可以打开文件并使用 malloc 分配内存,因为这些资源将在进程终止时关闭或释放。如果创建第二个线程,则无法保证第二个线程会在 IRIS 进程退出之前正常退出,因此不要创建第二个线程。

不要在代码中分配内存块并期望能够使用 $VIEW(address,−3,size) 来读取它。另外,不应该将 malloc 块传递回非 ObjectScript 代码。代码应该返回一个不透明句柄,稍后当它收到一个不透明句柄时,它应该在使用它之前验证它是否有效。

永远不应该只调用 exit。始终返回 ZF_SUCCESSZF_FAILURE(请记住,这些值的实现在 IRIS 平台之间有所不同)。

可以 fork 然后在子进程中调用 exec,但请务必确保父进程始终返回 IRIS,而子进程永远不会返回 IRIS

Windows 不同,UNIX 系统仅允许为当前帧和内部帧建立本地错误处理。

上一篇 下一篇

猜你喜欢

热点阅读