"而c1如果在t2上执行,后面的ui操作,如果发现当前线程不是ui线程t1,会直接异常的。"
我对"发现当前线程不是ui线程t1,会直接异常的"持怀疑态度,
我觉得,不能用非协程的框架行为,来推定支持协程的框架的行为。
换言之,如果一个框架支持协程,则你说的ui更新问题,要么框架直接支持不同的线程更新ui(当然,同一时刻只有一个可以更新ui),要么就是通过某种方式,让ui的更新陷回到同一线程,比如通过channel,通过socket pair,通过msg queue,或者某种封装过的线程间直接post lamda,比如boost asio的post
【 在 leadu 的大作中提到: 】
: 我去,第一个这种简单问题都需要详细解释。我再用尽可能简单的语言重新描述一下
: 现在假设线程t执行了一个协程c1,协程c1内部有若干操作,其中有1次磁盘同步blocking写入,写入之后更新ui。很常见的场景,对吧
: 当线程t执行到第一次磁盘写入的时候,按照你之前的Jave Green thread说法,下面是编译器或运行时会隐式把这个同步写入转换成异步写入,异步写入开始之后,协程c1挂起,释放线程t。
: ...................
--
FROM 113.120.108.*