本章介绍fork的多种用法。
描述:
使用多线程执行本网格中的代码块。
语法:
fork Ai,…
备注:
Ai为序列参数,其长度决定并行线程数,其中的单值参数将被复制成序列。将当前执行的网格及上下文复制出多份以用多线程分别执行,参数将被拆分后填入各线程的本格值,代码块中return的结果将被拼成序列作为主线程的本格值调用子程序。
参数:
Ai |
序列 |
示例:
(一)、单个参数
|
A |
B |
1 |
fork [[1,20,6,14,5],[32,8]] |
//返回多线程的return结果 |
2 |
|
=connect("demo") |
3 |
|
=B2.query("select * from EMPLOYEE where EID in (?) ",A1) |
4 |
|
=B2.close() |
5 |
|
return B3 |
(二)、多个参数
|
A |
B |
1 |
fork [[1,20,6,14,5],[32,8]],"F" |
//返回多线程的return结果 |
2 |
|
=connect("demo") |
3 |
|
=B2.query("select * from EMPLOYEE where EID in (?) and GENDER=?",A1(1),A1(2)) |
4 |
|
=B2.close() |
5 |
|
return B3 |
相关概念:
描述:
针对多路游标做并行计算。
语法:
fork cs
备注:
针对多路游标做并行计算,在代码块中引用主格为当前某路游标。
参数:
cs |
多路游标 |
示例:
|
A |
B |
|
1 |
=file("employee.txt") |
=A1.cursor@mt() |
根据文件employee.txt创建多路游标返回 |
2 |
fork B1 |
|
对多路游标做并行计算 |
3 |
|
=A2.select().fetch() |
循环获取各路游标中的记录 |
描述:
跨节点多线程执行代码块
语法:
fork ….;h,s reduce
备注:
….为参数序列,其长度决定并行线程数,其中的单值参数将被复制成序列。将当前执行的网格及上下文复制出多份以用h中的多个节点机的多线程分别执行,参数将被拆分后填入各节点机的各线程的本格值,代码块中return的结果将被拼成序列作为主线程的本格值调用子程序。跨节点多线程执行代码块,相当于使用callx()省略了分机上的dfx。代码块中不能引用除fork参数外的其它单元格和变量值。引用到的网格变量(包括格名)将被同时分发到分机网格中。
参数:
…. |
参数序列,分配到所有服务器任务满额时暂停分配,等待出现空闲服务器再继续分配,某服务器出错后其任务将被重新分配。 |
h |
服务器序列,其中每个服务器的描述均为一个字符串,格式为"地址:端口号",如"192.168.0.86:4001"。 |
s |
数列构成的序列,可省略 |
reduce |
reduce动作,~~表示当前执行reduce的结果,~表示当前工作返回的结果,可省略。 |
示例:
(一)、单个参数
|
A |
B |
1 |
fork [[1,20,6,14,5],[32,8],23];["192.168.1.100:8989","192.168.1.100:8282","192.168.1.100:8283"] |
//返回多节点机多线程的return结果 |
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 |
[[1],[2,3]] |
|
4 |
fork A2;A1,A3 |
|
5 |
|
=connect("demo") |
6 |
|
=B5.query("select * from SCORES where SUBJECT=?",A4) |
7 |
reduce |
~~|~ |
(二)、多个参数
|
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"] |
//返回多节点机多线程的return结果 |
2 |
|
=connect("demo") |
3 |
|
=B2.query("select * from EMPLOYEE where EID in (?) and GENDER=?",A1(1),A1(2)) |
4 |
|
=B2.close() |
5 |
|
return B3 |
相关概念:
描述:
并行执行多个代码块中每个代码块
语法:
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)) |