Commit Graph

29 Commits

Author SHA1 Message Date
John Nunley 8a0832c090
m: Remove the thread-local executor optimization
This was added in #37 as an optimization, but has since lead to many bugs. See
the issues #53, #57 and #60 for more information. I do not have the bandwidth
to address all of these bugs, so I'm taking the path of least resistance by
just removing the problematic code.

CLoses #53, #57 and #60

Signed-off-by: John Nunley <dev@notgull.net>
2023-10-16 18:50:00 -07:00
John Nunley 4154ad2190
Fix a bug where TLS would become None (#55)
* Fix a bug where TLS would become None

The bug is invoked as follows:

- Runner 1 is created and stores the current version of the TLS
  LOCAL_QUEUE variable, which is None.
- Runner 2 is also created. It stores the current version of the TLS
  variable as well, which is Runner 1's queue.
- Runner 1 is dropped. It stores None into the LOCAL_QUEUE variable.
- Runner 2 tries to run. It reads from the LOCAL_QUEUE variable, sees
  that it is None, and panics.

This could be solved by just not using the local queue if the variable
is None. However, we can do one better; if the slot is open, we can
optimize the runner by replacing it with our own queue. This should
allow for the local queue to be used more often.

Closes #54

Signed-off-by: John Nunley <dev@notgull.net>
2023-09-27 20:01:15 -07:00
John Nunley a5ff8df7d9
bugfix: Ensure that ex.run() produces a Send future
This commit makes sure that the run() and tick() functions produce
futures that are Send and Sync, to prevent a regression introduced in
PR #37. Tests are also added to prevent this regression in the future.

Signed-off-by: John Nunley <dev@notgull.net>
2023-08-20 17:08:35 -07:00
John Nunley aed7279805
Add smol-rs logo (#46) 2023-07-17 14:35:07 +09:00
John Nunley 9df3dd4974
alg: Push tasks directly to the local runner
This commit adds an optimization where a thread-local variable contains the queue of the
current runner. Rather than pushing to the global queue and hoping that a local queue
eventually picks it up, tasks are pushed directly to this local queue if available.

This has led to speedups of up to 70% in some cases and up to 10% in other workloads.
2023-07-02 11:29:19 -07:00
John Nunley 1a9e08ce73
Use fastrand v2.0.0 (#45) 2023-06-09 17:53:03 -07:00
John Nunley 8287e520b9
Implement debug output to be better (#33) 2022-12-25 07:12:59 -08:00
John Nunley 263ea89390
Replace once_cell with async-lock (#29) 2022-10-29 21:41:55 -07:00
Taiki Endo 2341801cd0 Fix clippy::redundant_closure warning 2021-12-30 09:38:02 +09:00
Taiki Endo b9ac443e56 Update slab to 0.4.4 2021-12-30 09:36:58 +09:00
Taiki Endo f25cd267ac Replace vec-arena with slab 2021-04-18 22:39:34 +09:00
Taiki Endo c4d019827f Replace deprecated compare_and_swap with compare_exchange 2020-12-24 21:22:43 +09:00
Stjepan Glavina 8dd3422176
Typo 2020-12-08 20:18:06 +01:00
Stjepan Glavina 38141bb5b4 Cleanup 2020-11-10 15:54:01 +01:00
Marc-Antoine Perennou 5a5ecd2763 add Executor::is_empty and LocalExecutor::is_empty
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2020-11-06 18:29:30 +01:00
Stjepan Glavina 29ba8a72ad Update futures-lite 2020-10-09 14:49:25 +02:00
Stjepan Glavina f9e28cd6d8 Make all executors scoped 2020-09-20 16:30:35 +02:00
Stjepan Glavina 525ac9fe7e Comments 2020-09-20 02:38:56 +02:00
Stjepan Glavina 8cea09da36 Update async-task 2020-09-20 02:36:54 +02:00
Stjepan Glavina 184185a7fa Refactor 2020-09-19 22:40:06 +02:00
Stjepan Glavina 6f2b0b8a49 Make executors scoped 2020-09-19 22:38:11 +02:00
Stjepan Glavina 31519f0cfc Replace AtomicU64 with AtomicUsize 2020-09-14 15:51:17 +02:00
Stjepan Glavina 5e08a9a351 Use atomics to make run() and tick() futures Send + Sync 2020-09-10 23:27:56 +02:00
Stjepan Glavina 2da645e6e0 Refactor 2020-08-29 19:57:21 +02:00
Stjepan Glavina d69638b2d3 simplify 2020-08-29 19:15:42 +02:00
Stjepan Glavina 6c6c1b1c2f Add tick() and try_tick() 2020-08-29 18:31:33 +02:00
Stjepan Glavina a28a9643c9 Redesign the whole interface 2020-08-26 23:46:56 +02:00
Marc-Antoine Perennou b9c846ec47 executor: add spawner
This allows spawning a task on an executor from outside of it

Fixes #1

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2020-07-23 15:15:53 +02:00
Stjepan Glavina e41f34cc00 Initial commit 2020-07-23 12:08:20 +02:00