首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
Swift
项阿丑
创建于2026-01-27
订阅专栏
Swift相关知识整理
等 7 人订阅
共381篇文章
创建于2026-01-27
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
1-21.【GCD】DispatchSource 的事件处理和队列调度关系?
1️⃣ 核心结论 换句话说: 内核检测到事件 → 通知 GCD → GCD 将事件处理 block 派发到指定队列 队列类型(串行 / 并发)直接影响事件处理执行方式 2️⃣ 队列对事件处理的影响 2
1-20.【GCD】DispatchSource 是如何与内核事件(kqueue / mach)关联的?
1️⃣ 核心结论 换句话说: DispatchSource ≈ 用户空间的事件封装 + 内核事件注册 事件发生 → 内核通知 → GCD 派发到队列 → 回调执行 2️⃣ 内核事件机制概览 2.1 k
1-19.【GCD】DispatchSourceTimer 和 Timer 的核心区别?
DispatchSourceTimer(GCD Timer)和 Timer(NSTimer)都是定时器,但它们在底层实现、线程模型、精度和性能上有本质区别。下面系统分析。 1️⃣ 核心区别一句话 2️
1-18.【GCD】DispatchSource 是什么?解决了什么问题?
DispatchSource 是 GCD(Grand Central Dispatch)提供的一种 高性能事件源机制,用于监听系统或自定义事件,并在事件发生时异步响应。它本质上是 事件驱动的观察者模式
1-17.【GCD】barrier 和锁(NSLock / os_unfair_lock)的本质区别?
1️⃣ 核心结论 2️⃣ 控制粒度:队列 vs 线程 特性 Barrier NSLock / os_unfair_lock 控制对象 队列内部任务执行顺序 临界区或资源访问线程 互斥范围 队列内的任务
1-16.【GCD】barrier 会创建新的线程吗?为什么?
不,dispatch_barrier 本身不会创建新的线程。 它只是一个 队列级别的调度控制机制,线程的使用依赖队列的 target 和系统线程池。下面详细解释原因和原理。 1️⃣ 核心结论 换句话说
1-15.【GCD】barrier 在底层是如何实现“读写互斥”的?
1️⃣ 目标:读多写少的安全策略 假设我们有一个 共享资源,需要: 多个读可以同时执行 → 并发,提高性能 写操作必须独占 → 保证数据一致性 dispatch_barrier 就是实现这个模式的工具
1-14.【GCD】为什么 barrier 只对自定义并发队列有效?
1️⃣ 核心结论 换句话说: 串行队列天然保证同一时间只执行一个任务 → barrier 多余 全局队列是共享的并发队列 → barrier 无法保证独占执行 2️⃣ 串行队列为什么不需要 barri
1-13.【GCD】dispatch_barrier 的作用和使用场景是什么?
1️⃣ 基本作用 本质:把并发队列临时变成“串行屏障” 保证 读-写或写-写安全,同时不阻塞其他并行队列的线程资源 2️⃣ 工作机制 假设有一个并发队列 concurrentQueue: 执行顺序:
1-12.【GCD】GCD 如何保证串行队列的“串行语义”?
1️⃣ 串行语义的定义 FIFO 顺序:先提交的任务先执行 互斥:不会同时执行多个任务 线程数量不固定 → 可能不同任务跑在不同线程上 2️⃣ 串行语义不是线程绑定 串行队列不要求“只用一条线程” G
1-11.【GCD】多个串行队列之间是否存在执行顺序?
下面详细拆开理解: 1️⃣ 同一串行队列 vs 不同串行队列 单个串行队列 保证输出顺序:A → B 任何时刻只有一个任务在执行 不同串行队列 输出顺序不确定 可能 A → B 也可能 B → A 原
1-10.【GCD】dispatch_async 提交的任务,什么时候“真正开始执行”?
1️⃣ 核心结论 换句话说:提交 ≠ 执行。 2️⃣ 提交阶段 vs 执行阶段 提交阶段(enqueue) 系统做了什么: 将 block 封装成任务对象 放入目标队列(target queue) 立
1-9.【GCD】async 和 sync 在调度和执行阶段的本质区别?
这是一个非常本质、非常“根”的问题。 很多人停留在“async 不阻塞 / sync 阻塞”,但那只是表象。 先给一句可以直接当结论用的 👇 下面分 提交阶段(enqueue) 和 执行阶段(exec
1-8.【GCD】并行队列一定并发执行吗?在什么情况下不会?
不一定。并行队列(concurrent queue)只“允许并发”,但并不“保证并发”。 这是 GCD 里一个非常容易被“名字误导”的点。 先给一句可以直接背的结论👇 下面按「不会并发」的典型场景逐一
1-7.【GCD】串行队列一定只用一个线程吗?为什么?
不一定,而且这是 GCD 里最容易被误解的一点之一。 先给一句“反直觉但正确”的结论👇 下面把 为什么、怎么做到的、什么时候看起来像一个线程 全讲清楚。 1️⃣ 串行队列真正的承诺是什么? ❌ 它不承
1-6.【GCD】自定义队列在底层是如何映射到全局队列的?
下面我们从 结构 → 映射路径 → 调度细节 → 常见误解 一层层拆。 1️⃣ 核心模型:Queue ≠ Thread(再强调一次) 在 GCD 里: 队列(DispatchQueue) : 👉 任务
1-5.【GCD】全局并发队列(global queue)有多少个?是如何区分的?
✅ 结论版(先背这个) 1️⃣ 到底有多少个全局并发队列? 从 GCD 语义层面看: 🧩 一共 6 种 QoS,对应 6 组全局并发队列 QoS Swift 枚举 用途 User Interactiv
1-4.【GCD】主队列(main queue)和主线程的关系是怎样绑定的?
主队列(DispatchQueue.main)和主线程(main thread)几乎是“强绑定”的,但两者并不是同一个概念**。我们可以从“是什么 / 怎么绑 / 有什么坑”三个层面来看。 1️⃣ 概
1-3.【GCD】DispatchQueue 的底层数据结构是什么?
它是一个复杂的 C 结构体,集成了任务队列、线程管理、性能优化等多个子系统。 核心数据结构:dispatch_queue_s 详细结构解析 1. 多态设计:dispatch_object 2. 任务队
1-2.【GCD】GCD 是如何管理线程池的?线程是谁创建的?
线程创建者:GCD 自己 GCD 是线程的实际创建者,但不是随意创建,而是通过高度优化的机制: GCD 线程池的智能管理 1. 按需创建,延迟销毁 2. 线程复用策略 线程池的关键参数和策略 1. 线
下一页