美文网首页
第十三章 ObjectScript - 特殊变量

第十三章 ObjectScript - 特殊变量

作者: Cache技术分享 | 来源:发表于2023-08-29 08:00 被阅读0次

    第十三章 ObjectScript - 特殊变量

    特殊变量

    一些特殊变量提供有关代码运行环境的信息。其中包括以下内容:

    • $HOROLOG,包含操作系统给出的当前进程的日期和时间。请参阅日期和时间值。
    • $USERNAME$ROLES,包含有关当前使用的用户名以及该用户所属角色的信息。
     write "You are logged in as: ", $USERNAME, !, "And you belong to these roles: ",$ROLES
    
    • $ZVERSION,其中包含标识当前运行的 IRIS 版本的字符串。

    其他包括 $JOB$ZTIMEZONE$IO$ZDEVICE

    其他变量提供有关代码处理状态的信息。其中包括 $STACK$TLEVEL$NAMESPACE$ZERROR

    $SYSTEM 特殊变量

    特殊变量 $SYSTEM 提供对大量实用方法的轻松访问。

    特殊变量 $SYSTEM%SYSTEM 包的别名,其中包含提供可满足各种需求的类方法的类。引用 %SYSTEM 中方法的惯用方法是构建使用 $SYSTEM 变量的引用。例如,以下命令在类中执行 %SYSTEM.OBJ 中的 SetFlags() 方法:

     DO $SYSTEM.OBJ.SetFlags("ck")
    

    由于特殊变量的名称不区分大小写(与类及其成员的名称不同),因此以下命令都是等效的:

     DO ##class(%SYSTEM.OBJ).SetFlags("ck")
     DO $System.OBJ.SetFlags("ck")
     DO $SYSTEM.OBJ.SetFlags("ck")
     DO $system.OBJ.SetFlags("ck")
    

    这些类都提供了 Help() 方法,该方法可以打印类中可用方法的列表。例如:

    TESTNAMESPACE>d $system.OBJ.Help()
    'Do $system.OBJ.Help(method)' will display a full description of an individual method.
     
    Methods of the class: %SYSTEM.OBJ
     
    CloseObjects()
         Deprecated function, to close objects let them go out of scope.
     
    Compile(classes,qspec,&errorlog,recurse)
         Compile a class.
     
    CompileAll(qspec,&errorlog)
         Compile all classes within this namespace
    ....
    

    还可以使用方法名称作为 Help() 的参数。例如:

    TESTNAMESPACE>d $system.OBJ.Help("Compile")
    Description of the method:class Compile:%SYSTEM.OBJ
     
    Compile(classes:%String="",qspec:%String="",&errorlog:%String,recurse:%Boolean=0)
    Compile a class.
    <p>Compiles the class <var>classes</var>, which can be a single class, a comma separated list, 
    a subscripted array of class names, or include wild cards. If <var>recurse</var> is true then 
    do not output the intial 'compiling' message or the compile report as this is being called inside 
    another compile loop.<br>
    <var>qspec</var> is a list of flags or qualifiers which can be displayed with 
    'Do $system.OBJ.ShowQualifiers()'
    and 'Do $system.OBJ.ShowFlags()
    

    锁定和并发控制

    任何多进程系统的一个重要特征是并发控制,能够防止不同进程同时更改数据的特定元素,从而导致损坏。因此,ObjectScript 提供了一个锁管理系统。

    基础

    基本的锁定机制是 LOCK 命令。该命令的目的是延迟一个进程中的活动,直到另一进程发出可以继续进行的信号为止。

    重要的是要理解锁本身并不会阻止其他进程修改关联的数据;它会阻止其他进程修改相关数据。也就是说, IRIS 不强制执行单方面锁定。锁定仅按照约定工作:它要求相互竞争的进程都使用相同的锁名称实现锁定。

    下面描述一个常见的锁场景:进程A发出LOCK命令, IRIS尝试创建锁。如果进程 B 已经拥有具有给定锁名称的锁,则进程 A 将暂停。具体来说,进程A中的LOCK命令没有返回,并且不能执行连续的代码行。当进程B释放锁时,进程A中的LOCK命令最终返回并继续执行。

    在许多情况下,系统会在内部自动使用 LOCK 命令,例如当使用持久对象或使用某些 SQL 命令时。

    锁表

    IRIS 维护一个系统范围的内存表,记录所有当前锁以及拥有这些锁的进程。该表(锁表)可通过管理门户访问,可以在其中查看锁并(在极少数情况下,如果需要)删除它们。

    锁表不能超过可以指定的固定大小。有因此,锁表可能会被填满,从而无法进行进一步的锁定。填充锁通常不被认为是应用程序错误; IRIS 还提供了一个锁队列,进程会等待,直到有空间将其锁添加到锁表中。

    但是,如果两个进程各自对已被另一个进程锁定的变量断言增量锁,则这种情况称为死锁,并且被视为应用程序编程错误。

    相关文章

      网友评论

          本文标题:第十三章 ObjectScript - 特殊变量

          本文链接:https://www.haomeiwen.com/subject/ybynmdtx.html