aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/sync/pool/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/sync/pool/README.md')
-rw-r--r--v_windows/v/vlib/sync/pool/README.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/v_windows/v/vlib/sync/pool/README.md b/v_windows/v/vlib/sync/pool/README.md
new file mode 100644
index 0000000..bdea5b3
--- /dev/null
+++ b/v_windows/v/vlib/sync/pool/README.md
@@ -0,0 +1,36 @@
+
+The `sync.pool` module provides a convenient way to run identical tasks over
+an array of items *in parallel*, without worrying about thread synchronization,
+waitgroups, mutexes etc.., you just need to supply a callback function, that
+will be called once per each item in your input array.
+
+After all the work is done in parallel by the worker threads in the pool,
+pool.work_on_items will return. You can then call pool.get_results<Result>()
+to retrieve a list of all the results, that the worker callbacks returned
+for each input item. Example:
+
+```v
+import sync.pool
+
+struct SResult {
+ s string
+}
+
+fn sprocess(pp &pool.PoolProcessor, idx int, wid int) &SResult {
+ item := pp.get_item<string>(idx)
+ println('idx: $idx, wid: $wid, item: ' + item)
+ return &SResult{item.reverse()}
+}
+
+fn main() {
+ mut pp := pool.new_pool_processor(callback: sprocess)
+ pp.work_on_items(['1abc', '2abc', '3abc', '4abc', '5abc', '6abc', '7abc'])
+ // optionally, you can iterate over the results too:
+ for x in pp.get_results<SResult>() {
+ println('result: $x.s')
+ }
+}
+```
+
+See https://github.com/vlang/v/blob/master/vlib/sync/pool/pool_test.v for a
+more detailed usage example.