Files
swift-mirror/stdlib/public/Concurrency/GlobalConcurrentExecutor.swift
Allan Shortlidge ba3cd79b6f Concurrency: Remove superflous _SwiftConcurrencyShims imports.
The `_SwiftConcurrencyShims` module was imported `@_implementationOnly` which
was causing warnings to be emitted during the stdlib build. The module
currently serves no purpose; the only declaration it contains is a defunct
`_SwiftContext` struct which is not referenced by anything. The module needs to
continue to exist for source compatibility, though, since it is part of the
toolchain and imported publicly from other modules.
2024-09-09 12:20:13 -07:00

65 lines
2.6 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Swift
// None of TaskExecutor APIs are available in task-to-thread concurrency model.
#if !SWIFT_STDLIB_TASK_TO_THREAD_MODEL_CONCURRENCY
/// The global concurrent executor that is used by default for Swift Concurrency
/// tasks.
///
/// The executor's implementation is platform dependent.
/// By default it uses a fixed size pool of threads and should not be used for
/// blocking operations which do not guarantee forward progress as doing so may
/// prevent other tasks from being executed and render the system unresponsive.
///
/// You may pass this executor explicitly to a ``Task`` initializer as a task
/// executor preference, in order to ensure and document that task be executed
/// on the global executor, instead e.g. inheriting the enclosing actor's
/// executor. Refer to ``withTaskExecutorPreference(_:operation:)`` for a
/// detailed discussion of task executor preferences.
///
/// Customizing the global concurrent executor is currently not supported.
@available(SwiftStdlib 6.0, *)
public var globalConcurrentExecutor: any TaskExecutor {
get {
_DefaultGlobalConcurrentExecutor.shared
}
// TODO: introduce a set {} once we are ready to allow customizing the
// default global executor. This should be done the same for main actor
}
/// A task executor which enqueues all work on the default global concurrent
/// thread pool that is used as the default executor for Swift concurrency
/// tasks.
@available(SwiftStdlib 6.0, *)
internal final class _DefaultGlobalConcurrentExecutor: TaskExecutor {
public static let shared: _DefaultGlobalConcurrentExecutor = .init()
private init() {}
public func enqueue(_ job: consuming ExecutorJob) {
_enqueueJobGlobal(job.context)
}
public func asUnownedTaskExecutor() -> UnownedTaskExecutor {
// The "default global concurrent executor" is simply the "undefined" one.
// We represent it as the `(0, 0)` ExecutorRef and it is handled properly
// by the runtime, without having to call through to the
// `_DefaultGlobalConcurrentExecutor` declared in Swift.
UnownedTaskExecutor(_getUndefinedTaskExecutor())
}
}
#endif