美文网首页
【极客班】多线程

【极客班】多线程

作者: xiongsirui | 来源:发表于2016-05-02 01:47 被阅读19次

进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。

GCD

GCD为Grand Central Dispatch的缩写。
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。在Mac OS X 10.6雪豹中首次推出,也可在IOS 4及以上版本使用。
创建队列:
有两个参数,一个是名字,第二个是类型(串行或者并行)。

//串行队列
dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", DISPATCH_QUEUE_SERIAL);
//并行队列
dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", DISPATCH_QUEUE_CON

dispatch_suspend,dispatch_resume提供了“挂起、恢复”队列的功能,简单来说,就是可以暂停、恢复队列上的任务。但是这里的“挂起”,并不能保证可以立即停止队列上正在运行的block,看如下例子:

dispatch_queue_t queue = dispatch_queue_create("me.tutuge.test.gcd", DISPATCH_QUEUE_SERIAL);
//提交第一个block,延时5秒打印。
dispatch_async(queue, ^{
    [NSThread sleepForTimeInterval:5];
    NSLog(@"After 5 seconds...");
});
//提交第二个block,也是延时5秒打印
dispatch_async(queue, ^{
    [NSThread sleepForTimeInterval:5];
    NSLog(@"After 5 seconds again...");
});
//延时一秒
NSLog(@"sleep 1 second...");
[NSThread sleepForTimeInterval:1];
//挂起队列                        
NSLog(@"suspend...");
dispatch_suspend(queue);
//延时10秒                
NSLog(@"sleep 10 second...");
[NSThread sleepForTimeInterval:10];
//恢复队列            
NSLog(@"resume...");
dispatch_resume(queue);

dispatch_apply的作用是在一个队列(串行或并行)上“运行”多次block,其实就是简化了用循环去向队列依次添加block任务。但是我个人觉得这个函数就是个“坑”,先看看如下代码运行结果:

//创建异步串行队列
dispatch_queue_t queue = dispatch_queue_create("me.tutuge.test.gcd", DISPATCH_QUEUE_SERIAL);
//运行block3次
dispatch_apply(3, queue, ^(size_t i) {
    NSLog(@"apply loop: %zu", i);
});
//打印信息
NSLog(@"After apply");

相关文章

  • 【极客班】多线程

    进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实...

  • 【极客班】ScrollView

    ScrollView是为控件或者布局添加滚动条. UIScrollViewDelegate 常用属性 Scroll...

  • 【极客班】AFNetworking

    AFNetWoring下载地址:https://github.com/AFNetworking/AFNetwork...

  • 【极客班】UITableView

    UITableView作为iOS非常重要的一部分,应当着重讨论 UITableView 学习地图 基本用法-->c...

  • 【极客班】Autolayout基础

    Autoresizing 如上图所示,如果只是定义控件和上级视图之间的约束,可以考虑用Autoresizing;V...

  • 【极客班】TableView实例

    动态TableView 在ViewController中添加一个Table View上去,选择Dynamic Pr...

  • 【极客班】自动旋转

    自动旋转: 可以在视图控制器中指定是否允许旋转用户界面。如果用户旋转设备,活动视图控制器将被问及是否可以旋转到新的...

  • 【极客班】tableview基础

    UITableView的结构 UITableVIew包含多个UITableVIewCell,而UITableVIe...

  • 【极客班】MVC模式

    MVC模式(Model-View-Controller,模型-视图-控制器) 在基于图形用户界面的应用程序中,使用...

  • 【极客班】OC简介

    重点理解: 1.学会理解面向对象编程:面向对象、组件封装、设计模式、架构模式。 2.时空人:三位一体分析法。时间分...

网友评论

      本文标题:【极客班】多线程

      本文链接:https://www.haomeiwen.com/subject/zoccrttx.html