相信大家都知道有同步和异步两种调用方式.区别我就不多说了,只想请教一下: 同步调用的时候(比方说invoke),此时,主程序的线程会处于阻塞状态,等待被调用方完成后,才可以继续执行。但此时,主线程既然都阻塞了,是不是应该有个新的线程去执行被调用方的操作呢?好多都说,异步才会在线程池里启动一个新的线程,同步不会,使用相同线程。可是不会的话,这个线程已经阻塞了,还怎么继续使用呢?
2 回答
慕森王
TA贡献1777条经验 获得超3个赞
基本知识。。
同步和异步是针对调用是否会立即执行来说的。
异步肯定是另起一个线程来执行。
同步调用方式可以用当前线程执行,也可以用另一个线程来执行。
总之需要等到调用完成才能继续执行后面的代码,所以也叫阻塞了。(跟用哪个线程执行没有关系。)
常用的invoke方式是直接用当前线程来执行的。
当然你也可以写自己的invoke, 另起一个线程来执行,然后当前线程等待(可以用while(ture)方式检查某个条件,笨方式,也可以用同步信号。(ManualResetEvent/AutoResetEvent 之类的来同步))
慕神8447489
TA贡献1780条经验 获得超1个赞
线程只是载体.线程上承载的是指令(由你编写的代码编译而成).同步调用时,被调用方的指令会嵌入到调用线程上;异步调用时,启动新线程的指令会嵌入到调用线程上,而具体的被调用方的指令会嵌入新启动的线程上.
在执行流程上,同步调用时,CPU需要执行完所有承载在调用线程上的指令,包括被调用方的指令;异步调用时,CPU只需执行完在调用线程上承载的启动新线程的指令,然后,CPU会转到新线程上去执行被调用方的指令.
- 2 回答
- 0 关注
- 510 浏览
添加回答
举报
0/150
提交
取消