@@ -4,7 +4,6 @@ import markdown
44import os
55import time
66import strings
7- import sync
87import runtime
98import document as doc
109import v.vmod
@@ -184,12 +183,9 @@ fn (vd &VDoc) get_file_name(mod string, out Output) string {
184183 return name
185184}
186185
187- fn (mut vd VDoc) work_processor (mut work sync.Channel, mut wg sync.WaitGroup ) {
186+ fn (mut vd VDoc) work_processor (work chan ParallelDoc ) {
188187 for {
189- mut pdoc := ParallelDoc{}
190- if ! work.pop (& pdoc) {
191- break
192- }
188+ pdoc := < - work or { break }
193189 vd.vprintln ('> start processing ${pdoc.d.base_path} ...' )
194190 file_name , content := vd.render_doc (pdoc.d, pdoc.out)
195191 if vd.cfg.output_type != .none {
@@ -198,23 +194,22 @@ fn (mut vd VDoc) work_processor(mut work sync.Channel, mut wg sync.WaitGroup) {
198194 os.write_file (output_path, content) or { panic (err) }
199195 }
200196 }
201- wg.done ()
202197}
203198
204199fn (mut vd VDoc) render_parallel (out Output) {
205- vjobs := runtime.nr_jobs ()
206- mut work := sync.new_channel[ParallelDoc](u32 (vd.docs.len))
207- mut wg := sync.new_waitgroup ()
200+ mut work := chan ParallelDoc{cap: vd.docs.len}
208201 for i in 0 .. vd.docs.len {
209- p_doc := ParallelDoc{vd.docs[i], out}
210- work.push (& p_doc)
202+ work < - ParallelDoc{vd.docs[i], out}
211203 }
212204 work.close ()
213- wg.add (vjobs)
205+
206+ vjobs := runtime.nr_jobs ()
207+ mut worker_threads := []thread{cap: vjobs}
208+ sw := time.new_stopwatch ()
214209 for _ in 0 .. vjobs {
215- spawn vd.work_processor (mut work, mut wg )
210+ worker_threads << spawn vd.work_processor (work)
216211 }
217- wg .wait ()
212+ worker_threads .wait ()
218213}
219214
220215fn (mut vd VDoc) render (out Output) map [string ]string {
0 commit comments