作者回复: 人工置顶🔝
作者回复: 👍👍👍
作者回复: 太多的线程会造成频繁的cpu上下文切换,你可以想象一下,假设你的小公司只有8台电脑,你雇8个程序员一直不停的工作显然是效率最高的。考虑到程序员要休息不可能连轴转,雇佣24个人,每天三班倒,效率也还行。
但是,你要雇佣10000个人,他们还是只能用这8台电脑,大部分时间不都浪费在换人、交接工作上了吗?
作者回复: 👍👍👍
线程就是为了能自动分配CPU时间片而生的。
作者回复: 👍👍👍
作者回复: 总结的非常好!
有一点需要改进一下,转账服务的实现中,异常处理的部分,还是需要先检查再补偿,否则有可能出现重复补偿的情况。
作者回复: 感谢指正,我尽快让编辑小姐姐改正。
作者回复: 你举的那个微服务异步调用的例子是没问题的,但它和单机还是远程调用没关系,单机同样可以做异步调用。
作者回复: 是的,就是这个意思。
作者回复: 你说的“同步非阻塞”什么情况呢?在我的理解,非阻塞就是异步。
作者回复: 同学你说的内容我们会在下一节课讲。
作者回复: 第一个问题,转入转出这两个操作不需要串行,是可以并行的。甚至执行顺序都没什么要求。我们唯一要保证的是这两个操作在一个事务中执行, “要么都成功,要么都失败”,就可以了。
你这个场景是在调用方(转账服务)异步,而服务提供方(账户服务)还是同步服务的情况下,才会出现。
你仔细看一下我们的异步设计,服务提供方提供的也是异步服务,那调用账户服务也是一瞬间就完成了,这样就不会出现你说的“几万个请求对象在CompletableFuture内部线程池内部还是排队”的情况了。