关于 GCD 的一点疑惑

2015-06-27 15:26:41 +08:00
 miki6180

既然GCD中使用dispatch_sync()是不会开启线程的, 那么有什么意义呢?是不是同步对于线程是没有意义的?异步才是有意义的?

4975 次点击
所在节点    iDev
26 条回复
fogisland
2015-06-27 16:09:20 +08:00
有些时候必须要把一些动作交给另外一个线程去做,同时当前线程要等待结果返回才能继续往下走。这时候就需要dispatch_sync。多线程不一定非得异步才有意义啊。
yahoo21cn
2015-06-27 16:21:33 +08:00
你把GCD关掉,换GMD的协程模式试试
miki6180
2015-06-27 16:24:17 +08:00
@fogisland 那不就意味这是多条线程的同步, 但是我这样写打印出来的线程的number值是一样的, 也就是说是在同一条线程。
- (void)viewDidLoad {
[super viewDidLoad];

dispatch_sync(dispatch_queue_create("cn.lovegh", DISPATCH_QUEUE_PRIORITY_DEFAULT),
^{
NSLog(@"%@", [NSThread currentThread]);
}
);


}。然道它的意思是阻塞当前线程, 那岂不是还要自己开线程, 在哪个线程中再用dispatch_sync()...
miki6180
2015-06-27 16:27:02 +08:00
@fogisland 代码写错,是这段
- (void)viewDidLoad {
[super viewDidLoad];

dispatch_sync(dispatch_queue_create("cn.lovegh", DISPATCH_QUEUE_PRIORITY_DEFAULT),
^{
NSLog(@"%@", [NSThread currentThread]);
}
);
xhacker
2015-06-27 16:35:16 +08:00
dispatch_sync 确实基本用不到。只有一个场景,就是你可以用 dispatch queue 代替锁。参见 http://stackoverflow.com/questions/4607125/using-dispatch-sync-in-grand-central-dispatch
miki6180
2015-06-27 16:39:00 +08:00
@xhacker get~
fogisland
2015-06-27 16:44:21 +08:00
@anonysecurity gcd是对线程池的封装,泥这样写,系统很可能就会把新建的gcd分配在当前线程了,因为这样已经满足你的需求了。你如果自己开一个线程,在里面dispatch sync到main queue,就能看到线程是不一样的了。手机打字说不清楚,建议你去了解下gcd和线程的关系就都明白了
miki6180
2015-06-27 17:01:38 +08:00
@fogisland 嗯, 但是有一点是没错, 它不会新开线程。我看了stackoverflow的大概明白了, 就是用来代替锁, 实现多线程的同步~~~生产者消费者的一种模型~。
66450146
2015-06-27 18:54:30 +08:00
一个简单的场景是,把 CoreData 放在了另一个 queue 上运行,操作 CoreData 之后要根据更新后的内容刷新 view
elgoog
2015-06-27 20:15:02 +08:00
本帖有一层楼被删了
vvqqdd
2015-06-27 20:15:43 +08:00
@yahoo21cn 也可以换一换MJD
leozhang
2015-06-27 20:25:41 +08:00
@elgoog
哈哈,你也注意到啦。
miki6180
2015-06-27 20:33:29 +08:00
@leozhang 我都没注意到。。。
Marfal
2015-06-27 20:37:12 +08:00
我还以为是gong、c、dang。。。
HFX3389
2015-06-27 20:43:01 +08:00
@elgoog 的确是有楼被删除了。。。
nyanyh
2015-06-27 21:37:46 +08:00
@HFX3389 好奇是怎么发现的?左上角的回复数和下面的楼层号是匹配的啊
loading
2015-06-27 21:44:59 +08:00
@a33004407 我也是…
ugvfpdcuwfnh
2015-06-27 23:55:44 +08:00
@elgoog
怎么发现的(⊙_⊙?)
flowfire
2015-06-28 00:38:01 +08:00
.............这标题。。。
freed
2015-06-28 00:41:31 +08:00
不止一层..被删了好几层...


因为帖子刚发没多久我看了 本来上面有好几层说以为是....... 的回复的....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/201566

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX