- Notifications
You must be signed in to change notification settings - Fork5
:awesome = Elixir's Task ++ Basho's sidejob library
License
PSPDFKit-labs/sidetask
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
SideTask is an alternative to Elixir'sTask.Supervisor that uses Basho'ssidejob library for better parallelism and to support capacitylimiting ofTasks.
Elixir'sTask.Supervisor
is implemented as a single:simple_one_for_one
supervisor with theindividualTask
s as children. This means starting a new task has to go through this singlesupervisor. Furthermore there is no limit to the number of workers that can be running at the sametime.
Basho's sidejob library spawns multiple supervisors (one for each scheduler by default) anduses ETS tables to keep track of the number of workers, thereby making it possible to startworkers in parallel while also putting an upper bound on the number of running workers.
SideTask provides an API similar toTask.Supervisor
, with the addition that all calls thatstart a new task require a sidejob resource as argument and can return{:error, :overload}
.
Convenience functions for adding and deleting sidejob resources are provided.
SideTask.add_resource(:example1,50)potential_tasks=fori<-1..100docaseSideTask.async(:example1,fn->:timer.sleep(1000);iend)do{:ok,task}->IO.puts"Task#{i} created"task{:error,:overload}->IO.puts"Task#{i} not created, overloaded"nilendendIO.inspectfortask=%Task{}<-potential_tasks,do:Task.await(task)
# Erlang spawns one scheduler per CPU core by defaultschedulers=:erlang.system_info(:schedulers)SideTask.add_resource(:example2,schedulers*2)forscheduler<-1..schedulersdospawn_linkfn ->fori<-Stream.iterate(0,&(&1+1))doSideTask.start_child:example2,fn->:timer.sleep(250);IO.inspectscheduler:scheduler,count:iendendendend
This software is licensed underthe MIT license.
This project is maintained and funded byPSPDFKit.
Seeour other open source projects, readour blog or say hello on Twitter (@PSPDFKit).
About
:awesome = Elixir's Task ++ Basho's sidejob library
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.