Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local tasks = {}
- function AddTask(f)
- local c = coroutine.create(f)
- tasks[#tasks+1] = c
- end
- local n = 4
- local N = 100000
- local yield = coroutine.yield
- for i = 1, N do
- AddTask(function()
- --local yield_att= 0
- local function fibonacci(n)
- yield_att = yield_att +1
- if yield_att % 10000 == 0 then
- yield()
- end
- if n<3 then
- return 1
- else
- return fibonacci(n-1) + fibonacci(n-2)
- end
- end
- --local s = os.clock()
- -- print("DONE", fibonacci(n), os.clock()-s, yields, yield_att)
- end)
- end
- local s = os.clock()
- local task = 0
- print("STARTING")
- local resume = coroutine.resume
- local status = coroutine.status
- local remove = table.remove
- while #tasks > 0 do
- task = (task % #tasks) + 1
- -- print(task)
- resume(tasks[task])
- if status(tasks[task]) == "dead" then
- remove(tasks, task)
- end
- -- FetchNewTasksFromCpp()
- end
- print("SUMM", os.clock()-s, (os.clock()-s)/N)
- print("STARTING")
- function fibonacci(n)
- if n<3 then
- return 1
- else
- return fibonacci(n-1) + fibonacci(n-2)
- end
- end
- local s = os.clock()
- print("NOYI", fibonacci(n), os.clock()-s)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement