基本知识。。
同步和异步是针对调用是否会立即执行来说的。
异步肯定是另起一个线程来执行。
同步调用方式可以用当前线程执行,也可以用另一个线程来执行。
总之需要等到调用完成才能继续执行后面的代码,所以也叫阻塞了。(跟用哪个线程执行没有关系。)
常用的invoke方式是直接用当前线程来执行的。
当然你也可以写自己的invoke, 另起一个线程来执行,然后当前线程等待(可以用while(ture)方式检查某个条件,笨方式,也可以用同步信号。(ManualResetEvent/AutoResetEvent 之类的来同步))
非常感谢回复!
还是有一个地方稍微不明白,既然同步可以使用当前线程,此时这个线程阻塞了,还怎么去执行被调用方的操作呢? 总觉得这里面有一些矛盾。
@leon032:
看你对这个阻塞怎么理解了。
阻塞是相对于当前执行处来说的。意思是需要等到执行完成才会执行后面的代码。
阻塞不等于挂起,跟线程挂起是两种说法。
关注...
线程只是载体.线程上承载的是指令(由你编写的代码编译而成).同步调用时,被调用方的指令会嵌入到调用线程上;异步调用时,启动新线程的指令会嵌入到调用线程上,而具体的被调用方的指令会嵌入新启动的线程上.
在执行流程上,同步调用时,CPU需要执行完所有承载在调用线程上的指令,包括被调用方的指令;异步调用时,CPU只需执行完在调用线程上承载的启动新线程的指令,然后,CPU会转到新线程上去执行被调用方的指令.
dfs
非常感谢两位的积极回复 @边城浪,@荒原上的军旗
看了一下阻塞和挂起的区别:
《阻塞(pend)就是任务释放CPU,其他任务可以运行,一般在等待某种资源或信号量的时候出现。挂起(suspend)不释放CPU,如果任务优先级高就永远轮不到其他任务运行,一般挂起用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。》
原来阻塞是释放CPU的,再结合@荒原上的军旗 的指教,这下总算有个比较清楚点的认识了。
再次感谢两位。