GCD学习

Grand Central Dispatch--GCD


GCD是苹果对多核的并行运行一种解决方案。(iOS中实现多线程目前有4种方案,最常用的是GCDNSOperation两种)

优点:基于C语言,简单易用,效率高,速度快,会自动管理线程生命周期,开发者只需关心GCD要执行的任务和队列

缺点: GCD的场景复杂时,可能会遇到死锁

博主只用过NSThread和GCD,觉得GCD用着挺方便的,加之听闻其效率高,感觉高大上,故也掺和掺和。其实我对GCD的理解也不深,只是列出我理解的东西,至少会用就好。

队列 类型  queueType
1⃣️main_queue --主队列 (串行队列)
2⃣️Global_Dispatch_Queue  -- 全局调度队列 (并发队列)
tips:这里解释下串行跟并发,串行是指同一时间只有一个任务被执行,前面的任务没完成,后面的只能等待⌛️;并发队列是指同一时间可以有多个任务被执行,而且 能得到的保证是它们会按照被添加的顺序开始执行,但何时开始,某一时刻有多少个任务执行,都是不确定的,只取决于GCD。
上面说到,有主队列和全局调度队列两种,全局调度队列又分为四个不同的优先级(backgroud、low、default、high),故系统中一般至少有五个队列。为何说至少,因为你也可以创建你自己的队列,这样就有不只五个队列了。

同步与异步
同步异步是相对于函数说的,一个同步函数只在它完成了任务才会返回,异步函数在开始了一个Block后立即返回,不管Block任务有没有完成。
dispatch_sync (...^{  } );   同步执行
dispatch_async (...^{  } );   异步执行
=>dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH,0),^{  ...  } );



下面列出一些实用的知识
Dispatch_barriers   阻塞
让一个并发队列变成串行队列,确保使用barrier提交的Block是队列中惟一执行的条目。

Dispatch_groups  调度组
在调度组里的所有任务都完成时,可同步/异步通知你。
  用法   1⃣️dispatch_group_t  myGroups = dispatch_group_create( );
       2⃣️dispatch_group_enter(myGroups);    //通知 myGroups任务开始
. . .(这里写任务)
. . .
       3⃣️dispatch_group_leave(myGroups);     //通知 myGroups任务完成
  // 同步通知,会阻塞当前线程,直到所有任务完成
       4⃣️dispatch_group_wait(myGroups,DISPATCH_Time_forever);
       //myGroups没有任务时,会异步执行Block的代码
   或异步4⃣️ dispatch_group_notify(myGroups,dispatch_get_main_queue( ),^{... });

后记,觉得这个GCD还是挺难的,在没有熟悉GCD的情况下,请不要乱用复杂的命令于项目中。


参考:
           nixzhu/dev-blog翻译作品
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值