同步会启用新的线程吗

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

泛舟湖上清波郎朗
浏览 516回答 2
2回答

慕森王

基本知识。。同步和异步是针对调用是否会立即执行来说的。异步肯定是另起一个线程来执行。同步调用方式可以用当前线程执行,也可以用另一个线程来执行。总之需要等到调用完成才能继续执行后面的代码,所以也叫阻塞了。(跟用哪个线程执行没有关系。)常用的invoke方式是直接用当前线程来执行的。当然你也可以写自己的invoke, 另起一个线程来执行,然后当前线程等待(可以用while(ture)方式检查某个条件,笨方式,也可以用同步信号。(ManualResetEvent/AutoResetEvent 之类的来同步))

慕神8447489

线程只是载体.线程上承载的是指令(由你编写的代码编译而成).同步调用时,被调用方的指令会嵌入到调用线程上;异步调用时,启动新线程的指令会嵌入到调用线程上,而具体的被调用方的指令会嵌入新启动的线程上.在执行流程上,同步调用时,CPU需要执行完所有承载在调用线程上的指令,包括被调用方的指令;异步调用时,CPU只需执行完在调用线程上承载的启动新线程的指令,然后,CPU会转到新线程上去执行被调用方的指令.
打开App,查看更多内容
随时随地看视频慕课网APP