随笔 - 400,  文章 - 0,  评论 - 7,  阅读 - 21万

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     
//    GCD 开几条线程并不是我们可以控制的,而是系统来决定的,
     
//    [self asyncConcurrent];
//    [self asyncSerial];
//    [self syncConcurrent];
//    [self syncSerial];
//    [self test_get_global_queue];<br>//   [self syncMain];//主线程操作直接死锁<br><br>    [NSThread detachNewThreadSelector:@selector(syncMain) toTarget:self withObject:nil];//在子线程地调用,会直接执行,不会死锁<em id="__mceDel"> 
}
 
 
/**
 异步函数 + 并发队列  :会开启多条线程,队列中的任务是异步执行的(并发执行)(无序执行的)
 */
- (void)asyncConcurrent{
     
    //1.创建任务
    /*
     参数1:const char * _Nullable label  , C语言参数 字符串 ,标识符,为了区分队列的 推荐写法:反着写
     参数2:dispatch_queue_attr_t  _Nullable attr,队列类型
     DISPATCH_QUEUE_CONCURRENT 并发,
     DISPATCH_QUEUE_SERIAL 串行
     */
    dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
     
    //2  2.1封装任务 2.2添加到任务队列中
    /**
     dispatch_async(<#dispatch_queue_t  _Nonnull queue#>, <#^(void)block#>)
     参数1:dispatch_queue_t  _Nonnull queue 队列
     参数2:<#^(void)block#>  要执行的任务
     */
    dispatch_async(queue, ^{
        NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
    });
}
 
 
/**
 异步函数 + 串行队列:可以开启线程,但是串行队列只会在同一个子线程执行
 */
- (void)asyncSerial{
    dispatch_queue_t queue = dispatch_queue_create("asyncSerial", DISPATCH_QUEUE_SERIAL);
    dispatch_async(queue, ^{
        NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
    });
}
 
 
/**
 同步函数 + 并发队列  :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
 */
- (void)syncConcurrent{
     
    //1.创建任务
 
    dispatch_queue_t queue = dispatch_queue_create("com.520it.www", DISPATCH_QUEUE_CONCURRENT);
 
    dispatch_sync(queue, ^{
        NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
    });
     
    dispatch_sync(queue, ^{
        NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
    });
     
    dispatch_sync(queue, ^{
        NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
    });
}
 
/**
 同步函数 + 串行队列  :不会会开启多条线程,不管后面是并发还是串行,任务是串行执行的
 */
- (void)syncSerial{
    dispatch_queue_t queue = dispatch_queue_create("syncSerial", DISPATCH_QUEUE_SERIAL);
    dispatch_sync(queue, ^{
        NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
    });
     
    dispatch_sync(queue, ^{
        NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
    });
     
    dispatch_sync(queue, ^{
        NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
    });
}
 
 
 
/**
 获得全局队列
 */
-(void)test_get_global_queue{
     
    /**
     获得全局并发队列 : 这个队列已经存在的, 我们只是获得
     参数1 : long identifier 优先级,
      DISPATCH_QUEUE_PRIORITY_HIGH 2
      DISPATCH_QUEUE_PRIORITY_DEFAULT 0
      DISPATCH_QUEUE_PRIORITY_LOW (-2)
      DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN    这是最低的优先级
      
     参数2 : unsigned long flags 给未来使用, 总是给个0
     */
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        NSLog(@"打印一下111 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下222 --- %@", [NSThread currentThread]);
    });
     
    dispatch_async(queue, ^{
        NSLog(@"打印一下333 --- %@", [NSThread currentThread]);
    });
}
</em>

  

1.

2

 
3.

 
4.

5.

 
8. 

 

posted on   懂事长qingzZ  阅读(734)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示