iOS 多线程的使用(GCD)

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    死锁  在主队列里面  在主线程执行同步任务

    同步执行  一个任务执行完毕之后  再去执行另外一个任务

    主队列(GCD)同步执行某个任务的时候  会等待前面的任务 执行完毕之后  再去执行主队列里面的任务

    主队列是在主线程里面同步执行任务的 它们在同一个线程里面 线程是顺序执行的这时候主线程会等主队列里面的任务执行完毕  再去执行主线程   主线程执行完毕才回去执行主队列里面的任务 从而出现死锁

    

    通过GCD获得主队列dispatch_get_main_queue

    所有接收队列对象  都用dispatch_queue_t

    dispatch_queue_t mainQueue = dispatch_get_main_queue();


    同步执行任务

    dispatch_sync(mainQueue, ^{

        NSLog(@"000000");

    });

    

    异步执行

    异步  允许开辟一个线程(利用系统空闲时间去执行  程序员  不能控制)

    同步不可以开辟线程 同步顺序执行)

    


        dispatch_async(mainQueue, ^{

           NSLog(@"%@ %d",[NSThread currentThread],i);

       });


    

    

  dispatch_get_main_queue()属于串行队列

   dispatch_queue_create("", null)属于串行队列

   串行队列按照顺序去执行队列的任务

 /**

   dispatch_queue_t mainQueue = dispatch_get_main_queue();

    dispatch_async(mainQueue, ^{

         NSLog(@"11111");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"22222");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"3333333");

    });

    dispatch_async(mainQueue, ^{

        NSLog(@"44444444");

    });

  */

   /**

    自己创建队列的方式

  dispatch_queue_t huluwaqueue =   dispatch_queue_create("huluwa", DISPATCH_QUEUE_CONCURRENT);

    for (int i = 0; i < 5; i ++) {

        

              dispatch_async(huluwaqueue, ^{

//                     NSLog(@"11111");

                   NSLog(@"%@ %d",[NSThread currentThread],i);

               });

    }

    

    */

    /**

//#define DISPATCH_QUEUE_PRIORITY_HIGH 2 //

//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)

//#define DISPATCH_QUEUE_PRIORITY_LOW (-2) //

//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台

//    gcd 默认提供了全局的并发队列  供整个应用程序使用 不需要手动创建

    dispatch_queue_t quanjuQueue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

    dispatch_queue_t quanjuQueue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

    dispatch_queue_t quanjuQueue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    dispatch_async(quanjuQueue1, ^{

         NSLog(@"11111");

         NSLog(@"11%@",[NSThread currentThread]);

    });

    dispatch_async(quanjuQueue2, ^{

        NSLog(@"2222");

        NSLog(@"22%@",[NSThread currentThread]);

    });

    dispatch_async(quanjuQueue3, ^{

        NSLog(@"33333");

        NSLog(@"33%@",[NSThread currentThread]);

    });

    */

    

/**

//    创建分组dispatch_group_create()

//     dispatch_group_t 相当于  类名

    dispatch_group_t num1 = dispatch_group_create();

    dispatch_queue_t queue1 = dispatch_queue_create("num1",NULL);

    for (int i = 0; i < 5; i ++) {

        dispatch_group_async(num1, queue1, ^{

            NSLog(@"download2");

        });

    }

    

//   分组执行完毕 调用这个方法

    dispatch_group_notify(num1, queue1, ^{

        NSLog(@"执行完毕的代码1");

    });

    

    dispatch_group_t num2 = dispatch_group_create();

    dispatch_queue_t queue2 = dispatch_queue_create("num1",NULL);

    

    for (int i = 0; i < 3; i ++) {

        dispatch_group_async(num2, queue2, ^{

            NSLog(@"download3");

        });

    }

    

    //   分组执行完毕 调用这个方法

    dispatch_group_notify(num2, queue2, ^{

        NSLog(@"执行完毕的代码2");

    });

 

    */

}

@end


【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值