注册 登录
主题 : 线程和队列的关系---从生产者和消费者的角度考虑
级别: 版主

状态: 连续签到 - [7天]
UID: 123750
精华: 1
发帖: 2092
可可豆: 3494 CB
威望: 3415 点
在线时间: 1556(时)
注册时间: 2012-02-15
最后登录: 2017-09-25
0 楼:  发表于: 2017-07-17 15:49    发自: Web Page

线程和队列的关系---从生产者和消费者的角度考虑   

貌似线程和队列是一对儿纠缠不清的冤家,到底也是说不清二者之间是什么关系,是怎么协同合作的,不过今天突然灵光一现,如果从生产者消费者的角度来考虑这个事情,,貌似很多同步、异步的问题很容易说清楚
<null>
级别: 侠客

状态: 连续签到 - [105天]
UID: 535422
精华: 0
发帖: 182
可可豆: 829 CB
威望: 647 点
在线时间: 439(时)
注册时间: 2015-12-31
最后登录: 2017-09-25
1 楼:  发表于: 2017-07-17 16:26    发自: Web Page
我询问一个问题,   同步串行队列跟异步串行队列的区别是什么? 是线程的个数吗?
我是一个有基本原则的人,我的基本原则是:看心情
级别: 版主

状态: 连续签到 - [7天]
UID: 123750
精华: 1
发帖: 2092
可可豆: 3494 CB
威望: 3415 点
在线时间: 1556(时)
注册时间: 2012-02-15
最后登录: 2017-09-25
2 楼:  发表于: 2017-07-17 16:40    发自: Web Page
回 1楼(Leng_) 的帖子
对一个串行队列,执行同步操作,有一种情况,如果同步操作同属于这个串行队列并且同步操作的目标队列还是这个串行队列,那就锁死
其他情况跟 所谓的异步串行队列没区别,表现就是 一个个的顺序执行

这俩队列区别仅在于是同步操作还是异步操作, 由于是串行队列,因此任务不管是同步还是异步,都将是顺序一个个的执行,
<null>
级别: 版主

状态: 连续签到 - [7天]
UID: 123750
精华: 1
发帖: 2092
可可豆: 3494 CB
威望: 3415 点
在线时间: 1556(时)
注册时间: 2012-02-15
最后登录: 2017-09-25
3 楼:  发表于: 2017-07-17 16:47    发自: Web Page
线程是一个消费者,线程的执行就是消费的一次过程
队列是一个生产者,所有任务都会在队列这个生产者的容器中存在

本身来讲,线程跟队列不应该存在特殊关系,但是有一点特殊,那就是 主队列容器中的任务(都是ui操作)必须用主线程来消费
除此之外,哪个队列容器 使用 哪个线程来消费,并没有特别的限制

从gcd的角度来看,你所写的所有代码,都可以看作一个个的任务,举个例子:viewdidload{...}  这就可以看作一个任务块,这个任务是放在主队列中的,默认系统调用主线程来消耗主队列中的viewdidload{...}任务



<null>
级别: 骑士
状态: 连续签到 - [1天]
UID: 291181
精华: 0
发帖: 316
可可豆: 424 CB
威望: 409 点
在线时间: 938(时)
注册时间: 2014-02-09
最后登录: 2017-09-25
4 楼:  发表于: 2017-07-17 18:06    发自: Web Page
GCD 使用队列管理添加到 GCD 中的代码块,然后会根据队列类型选择在不同线程执行这些代码块。
线程和队列的关系……应该说是 GCD 实现线程调度与通信中使用到的数据结构吧。
级别: 版主

状态: 连续签到 - [7天]
UID: 123750
精华: 1
发帖: 2092
可可豆: 3494 CB
威望: 3415 点
在线时间: 1556(时)
注册时间: 2012-02-15
最后登录: 2017-09-25
5 楼:  发表于: 2017-07-17 18:17    发自: Web Page
回 4楼(ccwf2006) 的帖子
应该不是,同步操作实际上是可以控制 用哪个线程去执行队列任务的,首先只要你能确定一个线程,你就可以决定用哪个线程去执行对应的操作

比如 主线线程,或者自建线程,都是可以实现的
<null>
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部