FAQ > 金融建模 > 建模问题 > 语法相关

Q:网格计算时立马执行结束,没有进行阻塞?    

  • A:2022-10-20 天软服务器进行了升级,数组采用copyonwrite模式,即只读时采用数组引用不再复制数组,写时进行数组复制,该模式大大提升数组统计函数的效率。
    同时,对需要依赖对数组进行访问时需要产生数组复制相关功能可能失效。

    比如已知可能的冲突是对存贮网格的数组进行复制将无法阻塞,需要采用dupvalue函数进行阻塞。
    即:
    以前写阻塞方式为 ret:=tmp;的方式,需要变更成ret:=dupvalue(tmp);进行处理,保证对网格结果tmp的复制,进行有保障的阻塞。
     
    例:以前这么写的:
    ret:=array();
    for i:=0 to 5 do
    begin
     ret[i]:=#TestFun(xxx);  //网格计算
    end

    r:=array();
    //对结果进行访问造成阻塞,以便等待各服务器运行的结果。
    for i:=0 to length(ret)-1 do
    r[i]:=ret[i];//以前只需要访问即可阻塞
    return r;



    现在可以改成:
    ret:=array();
    for i:=0 to 5 do
    begin
     ret[i]:=#TestFun(xxx);  //网格计算
    end

    r:=array();
    //对结果进行访问造成阻塞,以便等待各服务器运行的结果。
    for i:=0 to length(ret)-1 do
     r[i]:=dupvalue(ret[i]);//现在由于访问不需要复制原数据,所以不能造成阻塞,需要做复制数组这个操作才可
    return r;