Commit Graph

469 Commits (09c3c02c33ced3ab097fb6a1443c03d88a7ddcb3)

Author SHA1 Message Date
Daniel Kolesa 023af03361 spawn/make_channel/yield without explicitly specifying scheduler 2017-03-23 11:35:23 +01:00
Daniel Kolesa 147b8d8042 non-template spawn 2017-03-23 10:56:21 +01:00
Daniel Kolesa d73ad08e87 make channels outside of scheduler 2017-03-23 10:41:13 +01:00
Daniel Kolesa 47145f0431 make the generic condvar public 2017-03-23 10:25:24 +01:00
Daniel Kolesa 45e65d7ec7 unified single-type interface for channels 2017-03-23 03:17:09 +01:00
Daniel Kolesa 0e24dcd1c4 nested coroutine example + use stackpool for dispatcher in bscs 2017-03-23 00:40:42 +01:00
Daniel Kolesa 422a65cade actually free coroutine stacks in dtor (more predictable and safer) 2017-03-22 22:38:48 +01:00
Daniel Kolesa 1351ac14f6 fix lockups when a condvar signals while a task is being blocked 2017-03-22 20:01:37 +01:00
Daniel Kolesa 66758fa1df only put task to the waitlist after it's yielded 2017-03-22 19:00:36 +01:00
Daniel Kolesa cd5bc965bd use csched_task for both coroutine schedulers 2017-03-22 18:44:06 +01:00
Daniel Kolesa 18cfe5119f track current task for coroutine scheduler separately 2017-03-22 18:23:29 +01:00
Daniel Kolesa bffc917f46 use a custom coroutine type for tasks 2017-03-22 17:58:34 +01:00
Daniel Kolesa 2537d955d1 fixes, bigger stack for main task, take spawn funcs by value 2017-03-22 17:32:58 +01:00
Daniel Kolesa c1a1c4a1ac fix issues with coroutine scheduler threads locking up 2017-03-21 19:49:06 +01:00
Daniel Kolesa 307123fd35 revert the threadpool split (wasn't used in the end) 2017-03-21 00:29:38 +01:00
Daniel Kolesa c120f49634 implement an M:N thread/coroutine scheduler 2017-03-21 00:28:38 +01:00
Daniel Kolesa a080a17d00 separate thread pool into two structures
the internal one will also be used in parallel coroutine scheduler
2017-03-20 18:42:54 +01:00
Daniel Kolesa 367d2b8b31 lightweight backing for thread_pool tasks (no shared_ptr) 2017-03-20 04:12:44 +01:00
Daniel Kolesa c1c68fb339 always use packaged_task for thread_pool push 2017-03-20 03:11:59 +01:00
Daniel Kolesa e50a86f339 it's not needed/desirable to hold onto the lock while notifying 2017-03-20 02:44:38 +01:00
Daniel Kolesa 23652409f6 use lock_guard where possible 2017-03-20 02:35:50 +01:00
Daniel Kolesa e7855faeb1 add a way to reserve more stacks in stack_pool 2017-03-20 02:12:49 +01:00
Daniel Kolesa 5e2891c806 make dispatcher a coroutine (that way main can do its thing) 2017-03-19 23:36:29 +01:00
Daniel Kolesa cef3c96bdb use stack pool for coroutine scheduler 2017-03-19 20:02:09 +01:00
Daniel Kolesa d35e8b6341 channel api cleanup 2017-03-19 19:35:00 +01:00
Daniel Kolesa 94d72b693e remove split stack support (not portable or available on Windows) 2017-03-19 19:11:54 +01:00
Daniel Kolesa c123e98178 some universal funcs for working with schedulers 2017-03-19 18:12:08 +01:00
Daniel Kolesa 9a9466e943 make channels copyable (referring to a shared state) 2017-03-19 16:23:00 +01:00
Daniel Kolesa 9ad7fe76c4 add a simple coroutine scheduler that multiplexes tasks onto a single thread 2017-03-19 14:11:23 +01:00
Daniel Kolesa 9f6d8da9db allow return of value from scheduler start 2017-03-18 20:04:22 +01:00
Daniel Kolesa f07eefaf5a thread_pool push result type fix 2017-03-18 20:02:03 +01:00
Daniel Kolesa 795234c476 do the same with the returning version 2017-03-18 18:53:57 +01:00
Daniel Kolesa 3462703b3a only bind when args are passed 2017-03-18 18:50:23 +01:00
Daniel Kolesa 35cda8872e add a thread pool impl 2017-03-18 18:34:13 +01:00
Daniel Kolesa b4b7224dd0 initial skeleton for concurrency module 2017-03-18 01:05:10 +01:00
Daniel Kolesa 0da22e777d add a way to retrieve the current coroutine context 2017-03-17 03:04:15 +01:00
Daniel Kolesa 06fbdc7419 remove coroutine_type, but keep public context 2017-03-17 02:46:24 +01:00
Daniel Kolesa 959f319318 type inspection support on coroutines (with context as common base type) 2017-03-17 02:38:37 +01:00
Daniel Kolesa 75e4ac1cb7 unnecessary template keyword 2017-03-17 02:16:06 +01:00
Daniel Kolesa 043e38601f instantiate yielder at point of func call 2017-03-17 01:14:56 +01:00
Daniel Kolesa f8b7275d5f get rid of some index sequences 2017-03-17 01:11:30 +01:00
Daniel Kolesa a30e0ae639 move p_func into p_stor 2017-03-17 01:02:33 +01:00
Daniel Kolesa 58a11a3415 make storage for args/result a standalone object 2017-03-17 00:48:11 +01:00
Daniel Kolesa 23493c49af do not decay; breaks const type inputs 2017-03-16 23:40:00 +01:00
Daniel Kolesa 0a0fe27317 better generator yield/value storage semantics 2017-03-16 23:25:59 +01:00
Daniel Kolesa f4d3382617 allow custom condition variable types in channels 2017-03-16 01:16:03 +01:00
Daniel Kolesa ce155190e0 do not store the allocator/stack pointer directly, also call stack allocator dtor 2017-03-15 01:19:01 +01:00
Daniel Kolesa 78d6a23ad3 align the stack pointer by 16 bytes 2017-03-15 00:59:26 +01:00
Daniel Kolesa bdb95567e4 implement a stack pool (allocates a chunk of stacks, gives out as requested) 2017-03-14 19:34:05 +01:00
Daniel Kolesa 5e956ad0ce remove include 2017-03-14 01:48:21 +01:00
Daniel Kolesa 783057a3a3 add initial basic implementation for channels 2017-03-14 01:46:58 +01:00
Daniel Kolesa cf568c6f30 get rid of arg_wrapper, use lightweight storage for results 2017-03-13 20:18:35 +01:00
Daniel Kolesa 64380bda53 use pointers to store coro args with perfect forwarding (guaranteed to be alive until resume return) 2017-03-13 19:32:56 +01:00
Daniel Kolesa c89953c11f coro args/results don't need to be default constructible 2017-03-13 19:01:44 +01:00
Daniel Kolesa ea9ac2e5c6 add the same iterators to generator_range 2017-03-13 18:50:44 +01:00
Daniel Kolesa b63729641b auto unwind in coroutine_context (no manual dtor), clean up generator 2017-03-13 17:29:48 +01:00
Daniel Kolesa c2b82771f9 hide internal coroutine_context funcs from the rest 2017-03-12 16:58:33 +01:00
Daniel Kolesa f1341b913c unify context_call between coroutines and generators 2017-03-12 16:54:49 +01:00
Daniel Kolesa de45dd2e80 do stacksize clamp in ctor 2017-03-11 18:41:03 +01:00
Daniel Kolesa b2a71d773d stack cleanups 2017-03-11 18:39:46 +01:00
Daniel Kolesa c07f7d5ddc correct noexcept in coroutine.hh 2017-03-11 18:30:08 +01:00
Daniel Kolesa 88e6fe3906 revert the stack freeing method (can be achieved via stack allocator) 2017-03-11 18:24:55 +01:00
Daniel Kolesa 20f57dad9b dealloc stacks in destructor (allows stack reuse) 2017-03-11 17:57:04 +01:00
Daniel Kolesa 0185fa7c12 coroutine fixes/cleanups, remove INIT state (can be checked better) 2017-03-11 17:23:50 +01:00
Daniel Kolesa 8c6e7d8bf7 add a generic way to get an yielder for a coroutine/generator 2017-03-11 14:51:55 +01:00
Daniel Kolesa 64e699a2d2 implement more compares to make range halves conformant random/bidirectional iterators 2017-03-11 14:24:41 +01:00
Daniel Kolesa 9c9221822a directly iterable generators 2017-03-11 14:16:47 +01:00
Daniel Kolesa 058efff580 coroutine cleanups 2017-03-11 03:53:41 +01:00
Daniel Kolesa 2cf818a67b make generators autostart 2017-03-11 02:17:59 +01:00
Daniel Kolesa 935e1bc337 yielder revamp, separate generators without having to return 2017-03-11 02:12:43 +01:00
Daniel Kolesa b86df5c016 move over to standard filesystem module (from std::experimental or std) 2017-03-10 18:31:34 +01:00
Daniel Kolesa 52da0ab7ae windows fixes 2017-03-10 03:05:05 +01:00
Daniel Kolesa afd086b2a0 move some more bits into impl files 2017-03-09 19:21:01 +01:00
Daniel Kolesa 5fafcdf954 move the stack alloc impl bits into a source file 2017-03-09 01:00:47 +01:00
Daniel Kolesa fb592f8c2c shove the stack alloc stuff into detail:: (for potential reuse elsewhere) 2017-03-09 00:25:51 +01:00
Daniel Kolesa 8e97f7fdfd separate stack stuff into its own file, add support for segmented stacks on POSIX+gcc/clang 2017-03-08 18:11:39 +01:00
Daniel Kolesa 81feac59d1 add separate protected and unprotected stack allocators, use unprotected by default 2017-03-08 02:16:24 +01:00
Daniel Kolesa 48d039aea0 initial support for stack allocator objects 2017-03-08 02:06:56 +01:00
Daniel Kolesa 7d0778cf0a kill coroutine stack from entrypoint instead of destructor 2017-03-08 01:43:41 +01:00
Daniel Kolesa 1d5c98f830 add valgrind support to coroutine code 2017-03-08 00:52:31 +01:00
Daniel Kolesa 4987fd568d windows typo fix 2017-03-07 22:55:05 +01:00
Daniel Kolesa c526f12b81 use malloc on systems without MAP_ANON/ANONYMOUS (they're not in POSIX) 2017-03-07 22:48:44 +01:00
Daniel Kolesa 58206da3b4 use mmap to allocate stack on POSIX, VirtualAlloc on Windows 2017-03-07 22:39:17 +01:00
Daniel Kolesa 661393f9c5 some initial stack alloc/free funcs 2017-03-07 21:53:16 +01:00
Daniel Kolesa 3145ebe0c9 move coroutine context stuff to a separate file 2017-03-07 21:29:12 +01:00
Daniel Kolesa e97e70b427 constructor cleanup, const correctness, swap fixes, explicit bool, comments 2017-03-07 17:39:40 +01:00
Daniel Kolesa 483ec9df3b only initialize the context with a valid function 2017-03-07 02:19:25 +01:00
Daniel Kolesa 573c001786 put coroutine_context in detail and inherit from it 2017-03-07 02:07:13 +01:00
Daniel Kolesa 248acbeac5 use p_func to check finished status (no separate bool) 2017-03-07 01:25:56 +01:00
Daniel Kolesa 7ba1f9265b make value-returning no-argument coroutines iterable 2017-03-06 19:01:17 +01:00
Daniel Kolesa 64d92743e4 only pass yield to coroutines, make them movable and swappable, improve examples 2017-03-06 18:38:50 +01:00
Daniel Kolesa 9a194343f3 operator bool on coroutine should be inverse 2017-03-06 02:09:52 +01:00
Daniel Kolesa a4e17e22c7 fix coroutine + initial proof of concept generator (bad impl) 2017-03-06 00:47:15 +01:00
Daniel Kolesa 1f946bff50 forwarding of coroutine args/results 2017-03-05 23:49:20 +01:00
Daniel Kolesa 34a434ab53 move helpers to coro_base 2017-03-05 23:07:00 +01:00
Daniel Kolesa 5c209872b5 fix narrowing 2017-03-05 21:56:41 +01:00
Daniel Kolesa ed514c28a6 specialize coroutines for zero args 2017-03-05 20:11:39 +01:00
Daniel Kolesa d369bb4b8a use generic arg so we can construct coroutines from lambdas using = 2017-03-05 19:50:25 +01:00
Daniel Kolesa 1bb2dffc63 return the arg directly from yield with single-arg coroutines 2017-03-05 19:45:26 +01:00
Daniel Kolesa 2a842ef9da reimplement coroutine using the new fcontext assembly 2017-03-05 16:48:44 +01:00