Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom main and global executors #2654

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

al45tair
Copy link
Contributor

Add write up of custom executor proposals. There are still some concerns surrounding integration with Dispatch that need working through.

Use `any TaskExecutor` instead of `any Executor` for `Task.defaultExecutor`.

Rename `ExecutorJobKind` to `ExecutorJob.Kind`.

Add `EventableExecutor`; replace `SerialRunLoopExecutor` with `MainExecutor`,
then make `MainActor` and `PlatformMainExecutor` use the new protocol.
The previous iteration would have required us to make calling the
allocation methods a fatal error, and would have meant executors had
to check explicitly for the `.task` job kind before using them.

Instead, if we add a new `LocalAllocator` type, we can have an
`allocator` property that is `nil` if the job doesn't support allocation,
and a valid `LocalAllocator` otherwise.
@rjmccall rjmccall added the LSG Contains topics under the domain of the Language Steering Group label Feb 24, 2025
Since the previous pitch, I've added `Clock`-based `enqueue` methods
and made a few other changes, notably to the way you actually set
custome executors for your program.
Remove `EventableExecutor`; we can come back to that later.

Update documentation for `currentExecutor` and add `preferredExecutor` and
`currentSchedulableExecutor`.

Move the clock-based enqueuing to a separate `SchedulableExecutor` protocol,
and provide an efficient way to get it.  This means we don't need the
`supportsScheduling` property.

Back `ClockTraits` with `UInt32`.
@al45tair al45tair marked this pull request as ready for review March 14, 2025 16:17
@al45tair al45tair changed the title Initial public draft of custom executors proposal. Custom main and global executors Mar 14, 2025
We should use typed throws, which will make this work better for Embedded
Swift.
/// 1. The custom executor associated with an `Actor` on which we are
/// currently running, or
/// 2. The preferred executor for the currently executing `Task`, or
/// 3. The task executor for the current thread
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be "for the current task" instead of "current thread"

/// Executors can implement this method explicitly to avoid the use of
/// a potentially expensive runtime cast.
@available(SwiftStdlib 6.2, *)
var asSchedulable: AsSchedulable? { get }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
var asSchedulable: AsSchedulable? { get }
var asSchedulableExecutor: SchedulableExecutor? { get }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
LSG Contains topics under the domain of the Language Steering Group
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants