IOS 网络多线程-并发-串行队列
// dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //全局队列 dispatch_queue_t queue3 = dispatch_queue_create("queu3", DISPATCH_QUEUE_CONCURRENT);//并发队列 dispatch_queue_t queue = dispatch_queue_create("myquene", DISPATCH_QUEUE_SERIAL);//串行队列 dispatch_async(queue, ^{ for (int i =0; i<10; i++) { NSLog(@"0-----%@",[NSThread currentThread]); } }); dispatch_async(queue, ^{ for (int i =0; i<10; i++) { NSLog(@"1-----%@",[NSThread currentThread]); } });
全局队列、全局只存在一个 也是并发队列
并发队列、创建一个就是一个新的队列
// dispatch_sync和dispatch_async用来控制是否要开启新的线程 /** 队列的类型,决定了任务的执行方式(并发、串行) 1.并发队列 2.串行队列 3.主队列(也是一个串行队列) */ - (void)interview01 { // 问题:以下代码是在主线程执行的,会不会产生死锁?会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_sync(queue, ^{ NSLog(@"执行任务2"); }); NSLog(@"执行任务3"); // dispatch_sync立马在当前线程同步执行任务 } - (void)interview02 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_async(queue, ^{ NSLog(@"执行任务2"); }); NSLog(@"执行任务3"); // dispatch_async不要求立马在当前线程同步执行任务 } - (void)interview03 { // 问题:以下代码是在主线程执行的,会不会产生死锁?会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); } - (void)interview04 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL); // dispatch_queue_t queue2 = dispatch_queue_create("myqueu2", DISPATCH_QUEUE_CONCURRENT); dispatch_queue_t queue2 = dispatch_queue_create("myqueu2", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue2, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); } - (void)interview05 { // 问题:以下代码是在主线程执行的,会不会产生死锁?不会! NSLog(@"执行任务1"); dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ // 0 NSLog(@"执行任务2"); dispatch_sync(queue, ^{ // 1 NSLog(@"执行任务3"); }); NSLog(@"执行任务4"); }); NSLog(@"执行任务5"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构