首页 新闻 会员 周边

同步会启动新的线程吗

0
[已解决问题] 解决于 2011-10-24 16:08

相信大家都知道有同步和异步两种调用方式.区别我就不多说了,只想请教一下: 同步调用的时候(比方说invoke),此时,主程序的线程会处于阻塞状态,等待被调用方完成后,才可以继续执行。但此时,主线程既然都阻塞了,是不是应该有个新的线程去执行被调用方的操作呢?好多都说,异步才会在线程池里启动一个新的线程,同步不会,使用相同线程。可是不会的话,这个线程已经阻塞了,还怎么继续使用呢?

leon_ALiang的主页 leon_ALiang | 初学一级 | 园豆:194
提问于:2010-12-15 21:59
< >
分享
最佳答案
0

不会。阻塞是指调用方必须等待被调用返回后才能继续执行下一条指令。

你应该把线程想象成生产流水线,流水线本身是不能执行操作的,它只是预设了一定数量的加工点,OS会驱动流水线前进,同步调用即是加工点必须在流水线上完成,那么没有完成之前,这条流水线是停滞的,它无法前进到下一个加工点;异步调用即是加工点只是标记该工序应该在另一条生产流水线上完成,当前的流水线可以继续前进到下一个加工点,而不用等待另一条流水线上的加工完成。

Launcher | 高人七级 |园豆:45045 | 2010-12-16 09:39
非常感谢你的回复. 可是,我还是有一点不明白,既然此时这条流水线会停滞, 那么同步调用的时候还怎么可以在这条流水线上来执行呢? 也就是说这个线程已经阻塞了,它还怎么接着执行同步操作呢?
leon_ALiang | 园豆:194 (初学一级) | 2010-12-16 10:10
@leon032:"流水线本身是不能执行操作的",注意这句话,所有操作是由OS执行的,阻塞的含义是指阻止当前流水线进入下一个加工点,而非阻止OS执行当前加工点的操作.
Launcher | 园豆:45045 (高人七级) | 2010-12-16 17:10
其他回答(2)
0

同学,这个是操作系统级别的问题,操作系统已经处理了该功能。在同步完成后,会有个回调函数来激活主线程的运行。。。

lzhdim | 园豆:642 (小虾三级) | 2010-12-16 15:36
0

到底会不会启用新线程那个也说不定。

这得看什么应用了,一般很少见。不过我还是常见 BeginXXX之后立马来个EndXXX这样写的,那样就会在阻塞当前线程同时又用另外线程跑。

话说同步一般也不是线程被阻塞,而是UI反应阻塞,主线程在跑其他事情,无法处理新的输入···

不过同步异步都是分 CPU密集型和IO密集型,两者情况不同,具体看看书比较好:)

LittlePeng | 园豆:3445 (老鸟四级) | 2010-12-17 00:52
谢谢,我会再找些资料好好看看
支持(0) 反对(0) leon_ALiang | 园豆:194 (初学一级) | 2010-12-17 09:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册