@@ -25,51 +25,33 @@ proc fib(x: int): int =
2525 else: fib(x-1) + fib(x-2)
2626
2727proc workerMain(proxy: ThreadProxy) {.thread.} =
28- echo proxy.name, " is running"
29-
3028 # register action handler
3129 proxy.onData "fib":
3230 let x = data.getInt()
33- echo proxy.name, " is finding fib(", x, ")"
34- let y = fib(x)
35- result = %*{
36- "name": proxy.name,
37- "input": x,
38- "output": y
39- }
31+ return %fib(x)
4032
4133 # start processing channel
42- asyncCheck proxy.poll()
43-
44- # do other async task here
45-
46- runForever()
34+ waitFor proxy.poll()
4735
4836proc main() =
4937 let proxy = newMainThreadProxy("master")
5038 asyncCheck proxy.poll()
5139
5240 # create N threads
5341 let N = 4
54- for i in 0..<N:
42+ for i in 0 ..< N:
5543 proxy.createThread("worker_" & $i, workerMain)
5644
57- # distribute M jobs to threads randomly
45+ # distribute M jobs to threads
5846 let M = 40
5947 var done = 0
6048 for x in 1..M:
6149 capture x:
62- let future = proxy.ask("worker_" & $(x mod N), "fib", %x)
50+ let name = "worker_" & $(x mod N)
51+ let future = proxy.ask(name, "fib", %x)
6352 future.addCallback:
64- if future.failed:
65- let err = future.readError()
66- echo err.msg
67- else:
68- let json = future.read
69- let name = json["name"].getStr()
70- let x = json["input"].getInt()
71- let y = json["output"].getInt()
72- echo name, " found fib(", x, ") = ", y
53+ let y = future.read
54+ echo name, ": fib(", x, ") = ", y
7355 done += 1
7456
7557 while done < M: poll()
0 commit comments