fork

阅读(2786) 标签: fork,

本章介绍fork的多种用法。

fork A i ,…

描述:

使用多线程执行本网格中的代码块。

语法:

fork  Ai,…

备注:

Ai为序列参数,其长度决定并行线程数,其中单值参数将被复制成序列。将当前执行的网格及上下文复制出多份,用多线程分别执行,参数将被拆分后填入各线程的本格值代码块的返回值构成序列填入fork格中。

代码块中使用#c表示并行序号。

参数:

Ai

序列。

示例:

单个参数:

 

A

B

 

1

fork [[1,20,6,14,5],[32,8]]

 

执行fork代码块后,返回多线程的return结果:

2

 

=connect("demo")

 

3

 

=B2.query("select * from EMPLOYEE where EID in (?) ",A1)

EID为参数

4

 

=B2.close()

 

5

 

return B3

 

多个参数:

 

A

B

 

1

fork [[1,20,6,14,5],[32,8]],"F"

 

执行fork代码块后,返回多线程的return结果:

2

 

=connect("demo")

 

3

 

=B2.query("select * from EMPLOYEE where EID in (?) and GENDER=?",A1(1),A1(2))

EID为第一个序列参数,GENDER为第二个序列参数。

4

 

=B2.close()

 

5

 

return B3

 

使用并行序号:

 

A

B

 

1

=file("PersonnelInfo.txt")

 

 

2

fork to(4)

 

3

 

=A1.import@t(;A2:4)

多线程读取A1数据文件中的记录。

4

 

return #A2|B3

#A2表示并行序号。

 

相关概念:

callx()

call()

fork cs

描述:

针对多路游标做并行计算。

语法:

fork  cs

备注:

针对多路游标cs做并行计算,在代码块中引用主格为当前某路游标。

参数:

cs

多路游标。

示例:

 

A

B

 

1

=file("employee.txt")

=A1.cursor@mt()

根据文件employee.txt创建多路游标返回。

2

fork B1

 

对多路游标做并行计算。

3

 

=A2.select().fetch()

循环获取各路游标中的记录。

fork ....;hs reduce

描述:

在分机中执行代码块。

语法:

fork  ….;hs reduce

备注:

在分机hs中执行fork的代码块。引用到的网格变量(包括格名)将被分发,最终返回值填入fork格中。发生end msg失败时将重新给另一个分机。采用缺省分配方案。

参数:

….

参数序列。

hs

分机序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"

reduce

当任务数大于分机数时,同一分机的作业可以再做reduce动作。上次积累值在fork格,本次计算结果在reduce格。引用到的网格变量将被分发。该参数可省略。

示例:

单个参数:

 

A

B

 

1

fork [[1,20,6,14,5],[32,8]];["192.168.1.100:8989"]

 

执行fork代码块后,返回多线程的return结果:

IMG_256

2

 

=connect("demo")

 

3

 

=B2.query("select * from EMPLOYEE where EID in (?) ",A1)

 

4

 

=B2.close()

 

5

 

return B3

 

 

 

A

B

 

1

[192.168.0.116:8281,192.168.0.129:8281]

 

 

2

[English,Math,PE]

 

 

3

fork  A2;A1

 

参数EnglishPE分配给分机192.168.0.116:8281,参数Math分配给分机192.168.0.129:8281A3返回结果如下:

4

 

=connect("demo")

 

5

 

=B4.query("select * from SCORES  where SUBJECT=?",A3)

 

6

reduce

=A3|A6

 

多个参数:

 

A

B

 

1

fork [[1,20,6,14,5],[32,8],[3,4],23,12,89,56,90,231,333,111,231],"F";

["192.168.1.100:8989","192.168.1.100:8282","192.168.1.100:8283"]

 

A1返回结果如下:

2

 

=connect("demo")

 

3

 

=B2.query("select * from EMPLOYEE where EID in (?) and GENDER=?",A1(1),A1(2))

 

4

 

=B2.close()

 

5

 

return B3

 

 

相关概念:

callx()

fork  Ai,

fork … fork …

描述:

并行执行多个代码块中每个代码块。

语法:

fork

fork

备注:

并行执行多个代码块中的每个代码块,并将每个代码块的结果填入fork单元格中。

示例:

 

A

B

1

fork [[1,20,6,14,5],[32,8]]

//fork

2

 

=connect("demo")

3

 

=B2.query("select * from EMPLOYEE where EID in (?) ",A1)

4

fork [[1,20,6,14,5],[32,8]],"F"

//fork

5

 

=connect("demo")

6

 

=B5.query("select * from EMPLOYEE where EID in (?) and GENDER=?",A4(1),A4(2))