一、dispatch source 和 runLoop source
- dispatch source 和 runLoop source 都是用来监听事件的,可以创建不同类型的 dispatch source 和 runLoop source。
- dispatch source 监听到事件产生时,会将 event handler 添加到目标 queue,runLoop source 需要先按照某种模式加入到指定线程的 runLoop 中。
- dispatch source 和 runLoop source 都是异步处理模式,只要创建、设置好,就可以在相应的 handler 中监听到相应事件的产生。
二、dispatch source 与内核
- GCD 中除了主要的 Dispatch Queue 外, 还有不太引人注目的 Dispatch Source(信号源),它是 BSD 系内核惯有功能 kqueue 的包装。BSD (Berkeley Software Distribution,伯克利软件套件):是 Unix 的衍生系统,例如:OpenBSD、 FreeBSD、macOS。
- kqueue(kernel queue)内核队列:最初是 2000 年 Jonathan Lemon 在 FreeBSD 系统上开发的一个高性能的事件通知接口,是用来实现 IO 多路复用。注册一批描述符注册到 kqueue 以后(被封装成 kevent) ,当其中的描述符状态发生变化时,kqueue 将一次性通知应用程序哪些描述符可读、可写或出错了。kqueue 支持多种类型的文件描述符, 包括 socke