
. iOS- . .
- Pthreads, POSIX. . C. .
 - Background selectors. , . 
performSelector (, performSelectorOnMainThread:withObject:waitUntilDone:).  - NSThread. . .
 - Grand Central Dispatch. , — , . — libdispatch.
 - NSOperation. GCD. , 
NSInvocationOperation NSBlockOperation. 
GCD.
Libdispatch — Apple, . GCD Mac OS X 10.6. libdispatch, GCD, Apache 10 2009. Unix, FreeBSD Linux. . libdispatch .
. , . : pthreads, background selectors, NSThread. — libdispatch . NSThread pthreads. .
GCD
« iOS»
, Obj-C ( iOS 10). — , , AVFoundation WebKit. , , Apple. , trustedTimestamp CLLocation.
, , PhysicsKit. , timeline — . , iOS ( , ). . , : lib + . , libobjc libxpc. , github .
, libdispatch. , . . , : debugDescription, description, hash superclass. Apple.
libdispatch. . (, libdispatch), . , . cmake xcodeconfig, .
:
- Swift ( dispatch ),
 - Xcode, .
 
— , . , , , El Capitan, .
.
, libdispatch. , — queue_internal.h.
DISPATCH_STRUCT_HEADER — . OS_OBJECT_HEADER ( OS_OBJECT_HEADER — vtable ), , . (target queue) — .
DISPATCH_QUEUE_HEADER DISPATCH_QUEUE_CACHELINE_PADDING. , , . DISPATCH_QUEUE_HEADER , «» ( ), , .
continuation. DISPATCH_CONTINUATION_HEADER. , , , , , .
, libdispatch libpqw POSIX Thread API.
libpqw
, GCD pthread — libpwq, Apple. . 2011 , 0.9 2014 .
<pthread.h>, . , : , , . , pthread_workqueue_additem_np, , .
, . . , ( — , ), . . — , , , .
, libdispatch libpwq, pthreads. , ( Mac OS X Snow Leopard 2009 ).
dispatch_async
- libdispatch.
DispatchQueue.main.async {
    
}
. swift' . , CDispatch — GCD Swift .
public class DispatchQueue : DispatchObject {
    ...
}
public extension DispatchQueue {
    ...
    public class var main: DispatchQueue {
        return DispatchQueue(queue: _swift_dispatch_get_main_queue())
    }
    ...
    @available(OSX 10.10, iOS 8.0, *)
    public func async(execute workItem: DispatchWorkItem) {
        CDispatch.dispatch_async(self.__wrapped, workItem._block)
    }
    ...
}
, . GCD dispatch_async.
(pthread_create) (libpwq) :
dispatch_async_dispatch_continuation_async_dispatch_continuation_async2_dispatch_async_f2_dispatch_continuation_pushdx_push_dispatch_queue_push_dispatch_queue_push_inlinedx_wakeup_dispatch_queue_class_wakeup_dispatch_queue_class_wakeup_with_override_dispatch_queue_class_wakeup_with_override_slow_dispatch_root_queue_push_override_stealer_dispatch_root_queue_push_inline_dispatch_global_queue_poke_dispatch_global_queue_poke_slowpthread_create pthread_workqueue_additem_np
. dispatch_async:
void
dispatch_async(dispatch_queue_t dq, dispatch_block_t work)
{
    dispatch_continuation_t dc = _dispatch_continuation_alloc();
    uintptr_t dc_flags = DISPATCH_OBJ_CONSUME_BIT;
    _dispatch_continuation_init(dc, dq, work, 0, 0, dc_flags);
    _dispatch_continuation_async(dq, dc);
}
? -, — continuation. , _t _s. , - (, typedef struct dispatch_queue_s *dispatch_queue_t;). -, , . , , 0.
, (_dispatch_continuation_async _dispatch_continuation_async2). (noinline) (inline) , , . — continuation . _dispatch_continuation_push. , .
, _dispatch_async_f2, QoS continuation — . _dispatch_continuation_push, dx_push. , _dispatch_queue_push_inline. .
, — , . . , . .
_dispatch_queue_push_inline . (, , libdispatch) :
atomic_load_explicit . — <stdatomic.h>;__builtin_expect() __builtin_unreachable(), __builtin- — branch prediction.
— . _dispatch_async_f_redirect continuation . — .
dx_wakeup — _dispatch_queue_class_wakeup. , . , , , dx_push.
_dispatch_queue_class_wakeup_with_override, _dispatch_queue_class_wakeup_with_override_slow . slow — .
, , . . pthread_create pthread_workqueue_additem_np. , libpwq, , .
, , — .
Swift
, swift-, libdispatch. , Swift. libdispatch c swift' . , , — API GCD.
, libdispatch Swift — Wrapper.swift. .
, . libdispatch, dispatch_group_t dispatch_queue_t, - __wrapped. - libdispatch __wrapped.
:
public class DispatchQueue : DispatchObject {
    
    internal let __wrapped:dispatch_queue_t
    ...
    final internal override func wrapped() -> dispatch_object_t {
        return unsafeBitCast(__wrapped, to: dispatch_object_t.self)
    }
    ...
    public func sync(execute workItem: ()->()) {
        
        dispatch_sync(self.__wrapped, workItem)
    }
    ...
}
, , . , , . , Private.swift libdispatch. . swift' (, libdispatch).
@available(*, unavailable, renamed:"DispatchQueue.async(self:group:qos:flags:execute:)")
public func dispatch_group_async(_ group: DispatchGroup, _ queue: DispatchQueue, _ block: @escaping () -> Void)
{
    fatalError()
}
— ,
, libdispatch. . libdispatch POSIX Thread API — API .
libdispatch (libpwq), .
— ? . - , .
. - pthread iOS, .