为了账号安全,请及时绑定邮箱和手机立即绑定

同步会启用新的线程吗

同步会启用新的线程吗

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

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

基本知识。。

同步和异步是针对调用是否会立即执行来说的。

异步肯定是另起一个线程来执行。

同步调用方式可以用当前线程执行,也可以用另一个线程来执行。

总之需要等到调用完成才能继续执行后面的代码,所以也叫阻塞了。(跟用哪个线程执行没有关系。)

常用的invoke方式是直接用当前线程来执行的。

当然你也可以写自己的invoke, 另起一个线程来执行,然后当前线程等待(可以用while(ture)方式检查某个条件,笨方式,也可以用同步信号。(ManualResetEvent/AutoResetEvent 之类的来同步))


查看完整回答
反对 回复 2018-12-09
?
慕神8447489

TA贡献1780条经验 获得超1个赞

线程只是载体.线程上承载的是指令(由你编写的代码编译而成).同步调用时,被调用方的指令会嵌入到调用线程上;异步调用时,启动新线程的指令会嵌入到调用线程上,而具体的被调用方的指令会嵌入新启动的线程上.

在执行流程上,同步调用时,CPU需要执行完所有承载在调用线程上的指令,包括被调用方的指令;异步调用时,CPU只需执行完在调用线程上承载的启动新线程的指令,然后,CPU会转到新线程上去执行被调用方的指令.


查看完整回答
反对 回复 2018-12-09
  • 2 回答
  • 0 关注
  • 510 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信