单机数据库时代
DbConnection conn = new DbConnection(IPAddress);
DbResult res = conn.exec(Query);
res.display();
大数据时代
- 代码写法1: 串行同步
DbResult res1 = conn1.exec(Query1);
DbResult res2 = conn2.exec(Query2, res1);
res2.display();
- 代码写法2: 并行同步
DbResult (res1, res2) = ExecParallelQuery(conn1, Query1, conn2, Query2);
formatAndOutput(res1, res2);
- 串行还是并行?
- 函数调用把并行处理的可能性大大降低:
function getResult() {
DbConnection conn = new DbConnection(IPAddress);
DbResult res = conn.exec(Query);
return res;
}
- 代码写法3: 异步
DbConnection conn = new DbConnection(IPAddress);
Future<DbResult> res = conn.asyncExec(Query);
- 异步写法不怕函数调用
function getResult1() {
DbConnection conn = new DbConnection(IPAddress);
Future<DbResult> res = conn.asyncExec(Query);
yield return res;
}
- 异步写法有传染性
function getResult1() {
DbConnection conn = new DbConnection(IPAddress);
Future<DbResult> res = conn.asyncExec(Query);
yield return res;
}
function getResult2() {
DbResult res1 = waitFor(getResult1());
yield return res1;
}
- Facebook 全异步写法
实例
- 错误的代码
找出朋友中在淘宝上买过东西的人:
IdList friends = waitFor(getFriends(myId));
yield return getTaoBaoBuyers(friends);
找出朋友中在淘宝上买过保时捷的人?
上面的代码:在写第一行代码时已经错了!
- 正确的代码
找出朋友中在淘宝上买过东西的人:
IdList friends = waitFor(getFriends(myId)); ----❌
yield return getTaoBaoBuyers(friends); ----❌
找出朋友中在淘宝上买过保时捷的人:
IdList buyers = waitFor(getPorscheBuyer()); ----✅
yield return getFriends(buyers); ----✅
- 两行代码同时考虑呢?