C++ 线程(串行 并行 同步 异步)详解
创新互联建站服务项目包括镇康网站建设、镇康网站制作、镇康网页制作以及镇康网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,镇康网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到镇康省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!看了很多关于这类的文章,一直没有总结。不总结的话就会一直糊里糊涂,以下描述都是自己理解的非官方语言,不一定严谨,可当作参考。
首先,进程可理解成一个可执行文件的执行过程。在ios app上的话我们可以理解为我们的app的.ipa文件执行过程也即app运行过程。杀掉app进程就杀掉了这个app在系统里运行所占的内存。
线程:线程是进程的最小单位。一个进程里至少有一个主线程。就是那个main thread。非常简单的app可能只需要一个主线程即UI线程。当然大部分还是会有一些子线程的,比如如果你用了AFNetWorking,你的请求都是开辟了子线程。
关于串行,并行,同步,异步,我还是以下面代码的方式做个说明。
首先button点击事件运行在主线程里,先是在主线程里做了打印了一句话,然后创建了一个串行或者并行的队列,之后连续创建了3个同步或者异步的block任务放入此队列中,最后再在主线程里打印一句话。
- (IBAction)serialSync:(id)sender { NSLog(@"start log in main thread"]); dispatch_queue_t myQueue = dispatch_queue_create("myQueue", NULL); for (NSInteger n = 0; n < 3; n++) { dispatch_sync(myQueue, ^{ for (NSInteger i = 0; i < 500000000; i++) { if (i == 0) { NSLog(@"串行同步任务%ld -> 开始%@",n,[NSThread currentThread]); } if (i == 499999999) { NSLog(@"串行同步任务%ld -> 完成",(long)n); } } }); } NSLog(@"阻塞我没有?当前线程%@",[NSThread currentThread]); } - (IBAction)serialAsync:(id)sender { NSLog(@"start log in main thread"]); dispatch_queue_t myQueue = dispatch_queue_create("myQueue", NULL);//创建一个串行队列 for (NSInteger n = 0; n < 3; n++) { dispatch_async(myQueue, ^{ for (NSInteger i = 0; i < 500000000; i++) { if (i == 0) { NSLog(@"串行异步任务%ld -> 开始%@",n,[NSThread currentThread]); } if (i == 499999999) { NSLog(@"串行异步任务%ld -> 完成",(long)n); } } }); } NSLog(@"阻塞我没有?当前线程%@",[NSThread currentThread]); } - (IBAction)concurrentSync:(id)sender { NSLog(@"start log in main thread"]); dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); for (NSInteger n = 0; n < 3; n++) { dispatch_sync(myQueue, ^{ for (NSInteger i = 0; i < 500000000; i++) { if (i == 0) { NSLog(@"并行同步任务%ld -> 开始%@",(long)n,[NSThread currentThread]); } if (i == 499999999) { NSLog(@"并行同步任务%ld -> 完成",(long)n); } } }); } NSLog(@"阻塞我没有?当前线程%@",[NSThread currentThread]); } - (IBAction)concurrentAsync:(id)sender { NSLog(@"start log in main thread"]); dispatch_queue_t myQueue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT); for (NSInteger n = 0; n < 3; n++) { dispatch_async(myQueue, ^{ for (NSInteger i = 0; i < 500000000; i++) { if (i == 0) { NSLog(@"并行异步任务%ld -> 开始%@",n,[NSThread currentThread]); } if (i == 499999999) { NSLog(@"并行异步任务%ld -> 完成",(long)n); } } }); } NSLog(@"阻塞我没有?当前线程%@",[NSThread currentThread]); }
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款