GCD Dispatch Sources

Python量化投资入门教程:从零构建你的第一个交易策略 量化投资教程以数学模型和计算机程序实现超额收益,选用Python工具链完成数据获取、策略构建及回测。通过移动平均线交叉策略示例,展示数据预处理、信号生成、收益计算及可视化全流程,结合收益率、最大回撤和夏普比率评估策略,并建议参数优化与策略融合提升稳健性。 阅读详情

Dispatch source是一个监视某些类型事件的对象。当一个事件发生时,它会自动将一个处理该事件的block放入dispatch queue的执行例程中。GCD支持的事件有:
1. Mach port send right state changes;
2. Mach port receive right state changes;
3. External process state change;
4. File descriptor ready for read;
5. File descriptor ready for write;
6. Filesystem node event;
7. POSIX signal;
8. Custom timer;
9. Custom event;
它支持所有kqueue所支持的事件以及mach端口、内建计时器支持和用户事件。

用户事件
该事件是调用dispatch_source_merge_data函数来向自己发送信号。GCD在事件句柄执行前自动将多个事件联结。可以将数据“拼接”至dispatch source中任意次,并且如果dispatch queue在此期间比较繁忙,GCD只会调用该句柄一次。用户事件有两种:DISPATCH_SOURCE_TYPE_DATA_ADD和DISPATCH_SOURCE_TYPE_DATA_OR。用户事件源又个unsigned long data属性,我们将一个unsigned long传入dispatch_source_merge_data。当使用_ADD时,事件在联结时会将这些数字相加。当使用_OR时,事件在联结时会将这些数字逻辑与运算。当事件句柄执行时,可以使用dispatch_source_get_data访问当前值,然后这个值会被重置为0。

dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_ADD, 0, 0, dispatch_get_main_queue());
dispatch_source_set_event_handler(source, ^{
    NSLog(@"%ld", dispatch_source_get_data(source));
});
dispatch_resume(source);
NSArray *array = @[@"", @"", @""];
dispatch_apply(array.count, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(size_t index) {
    dispatch_source_merge_data(source, 1);
});

dispatch source和dispatch_async相比,主要优势是数据的联结。

内建事件

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t stdinSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, STDIN_FILENO, 0, globalQueue);
dispatch_source_set_event_handler(stdinSource, ^{
    char buf[1024];
    ssize_t len = read(STDIN_FILENO, buf, sizeof(buf));
    if (len > 0) {
        NSLog(@"Get data from stdin:%.*s", (int)len, buf);
    }
});
dispatch_resume(stdinSource);

这是GCD读取标准输入,但是对于其他文件描述符,需要考虑完成读写后怎么清除描述符:

dispatch_source_set_cancel_handler(stdinSource, ^{
    dispatch_source_cancel(stdinSource);
});

使用其他的dispatch source类型也差不多:提供一个source(mach port、文件描述符、进程ID等)的区分符来作为dispatch source的句柄。mask参数通常不会被使用,但对于DISPATCH_SOURCE_TYPE_PROC来说mask指的是想要接受哪一种进程事件。我们可以制定一个句柄,通过dispatch_source_get_mask访问它。

计时器
该事件不使用mask/handle参数,它使用dispatch_source_set_timer函数来配置计时器,这个函数有三个参数来控制计时器的触发:
start参数控制计时器第一次触发的时刻,参数类型dispatch_time_t,这是一个opaque类型,我们不能直接操作它,可以通过dispatch_time和dispatch_walltime函数来创建。另外,DISPATCH_TIME_NOW和DISPATCH_TIME_FOREVER通常很有用。
interval是计时器的时间间隔。
leeway参数告诉系统计时器需要的精准程度。所有计时器都不会保证百分百精准,但可以通过该参数保证精准的努力程度。合理利用该参数,可以降低资源消耗。

dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 100 * NSEC_PER_SEC, 1 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{

});
dispatch_resume(timer);
YOLOv11【第一章:零基础入门篇·第10节】YOLOv11项目实战:从零搭建检测系统! 🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 阅读详情

相关推荐

SAP EWM 内向交货流程(一)

本文介绍了SAP EWM系统中内向交货单的基本配置与操作流程。

huqinghai的专栏 2398

iOS多线程——Dispatch Source

iOS多线程——Dispatch Source

渐行渐远 540

【微服务】SpringBoot 对接飞书审批流程使用详解

SpringBoot 对接飞书审批流程使用详解

congge_study的博客 3771

GCD介绍(三): Dispatch Sources

该系列文章转载自:http://www.dreamingwish.com/ 何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。 说的貌似有点不清不楚。我们到底讨论哪些事件类型? 下面是GCD 10.6.0版本支持的事件: Mach port

Terry 1271

【某音电商】protobuf聊天协议逆向

某音电商私信、聊天消息protobuf协议逆向分析与解析

吴秋霖的博客 2315

Joule 终于会说 ABAP 了:从 ADT 提效到 ABAP AI SDK + ISLM 自建企业级 AI 场景的落地路线

生成结构化摘要(故障现象、初步原因、处理动作、备件消耗)自动给出建议分类(电气、机械、软件、网络)把摘要回写到工单抬头,方便后续统计与知识沉淀如果你用 CAP 来做这类服务,通常会在 Node.js 层封装一个对 AI Hub 的调用,再通过 OData 或 Event 把结果写回 SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 343

iOS多线程中的dispatch_semaphore_t semaphore(dispatch组和信号量。)

在Windows平台下, 对线程的同步控制,可以有Critical Section,Mutex,Semaphore,Event 等方式.     在IOS平台,使用GCD进行简单的多线程编程时,可以使用dispatch_semaphore_t进行相应的同步操作.      IOS平台上没有对应的Event这个控制对像. 对于一些适合Event模式的情况下,可以通过dispatch_sem

Eduora_meimei的专栏 1万+

【3】 灰度变换(1)

第三章(1)【总三】

课题分离 659

iOS并发编程指南:Dispatch Queue任务执行与Dispatch Source

导读: 本文为读《Concurrency Programming Guide》笔记第三篇,在对OS X和iOS应用开发中实现任务异步执行的技术、注意事项、Operation与Dispatch Queues实践解析后,作者付宇轩(@DevTalking)着重分享了让Dispatch Queue执行任务的那些事儿。当然,本着“Talk is cheap, show me the code”原则,...

唐小引(Echo)的 优快云 博客。 1687

基于 Qt C++ 的金融行情交易终端

由于完整的商业级源码非常庞大,我将为你提供一个 **结构完整、可直接编译运行的基础框架**,并详细说明各模块的实现思路和扩展方向。double波动 = quote.lastPrice * (rand()%200 - 100) / 10000.0;// 订单缓存(orderId -> Order)

寒寒豆豆软件公司的博客 191

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用

多标签图像分类:标签依赖关系建模的最新论文解读与实战应用 ,人工智能,计算机视觉,大模型,AI,本文解读了最新相关论文,包括基于图神经网络(GCN)的ML-GCN方法,通过构建标签相关矩阵建模依赖关系;区域潜在语义依赖的RLSD模型,定位关键区域并利用RNN建模语义依赖;以及语义图表示学习的SSGRL框架,结合语义解耦与交互模块。通过实战应用,展示了基于PyTorch的ML-GCN模型实现,包括图像特征提取、标签依赖建模及训练评估流程,为多标签图像分类提供了有效解决方案。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 18万+

线程间的通信与同步

线程间的通信与同步

小胜爱捣鼓 1126

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

GCD介绍(三)-Dispatch Sources

何为Dispatch Sources     简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。     说的貌似有点不清不楚。我们到底讨论哪些事件类型?     下面是GCD 10.6.0版本支持的事件:          Mach port send right state

u010850094的博客 428

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

iOS 并行编程:GCD Dispatch Sources

1 简介        dispatch source是一种用于处理事件的数据类型,这些被处理的事件为操作系统中的底层级别。Grand Central Dispatch(GCD)支持如下的dispatch sources类型:  Timer dispatch sources:定时器类型,能够产生周期性的通知事件;  Signal dispatch sources:信号类型,当

sharpyl的专栏 531

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

GCD之Dispatch Sources

何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。 说的貌似有点不清不楚。我们到底讨论哪些事件类型? 下面是GCD 10.6.0版本支持的事件: Mach port send right state changes. Mach port re

新的开始,新的启程 477

GCD教程(三):Dispatch Sources

接上一篇,原帖地址:http://www.dreamingwish.com/dream-2012/intro-to-grand-central-dispatch-part-iii-the-dispatch-sources.html 何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block...

dhw6532652的博客 178

iOS_GCD_讲解三_Dispatch Sources

转载出处:http://www.dreamingwish.com/dream-2012/gcd%E4%BB%8B%E7%BB%8D%EF%BC%88%E4%B8%89%EF%BC%89-dispatch-sources.html 何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个

a330416020—my_start的专栏 612

GCD介绍(三):Dispatch Sources

何为Dispatch Sources 简单来说,dispatch source是一个监视某些类型事件的对象。当这些事件发生时,它自动将一个block放入一个dispatch queue的执行例程中。 说的貌似有点不清不楚。我们到底讨论哪些事件类型? 下面是GCD 10.6.0版本支持的事件: Mach port send right state changes. Ma

kongying的博客 389
上一篇: GCD的多核心性能
下一篇: GCD队列操控
ssjson
博客等级 码龄15年 3粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值