现在在学习线程,产生些许疑问:
1。同步是否可看作依次执行?
2。异步可同时执行?
3。在实际项目中,哪些地方可以使用它们?
同步:发出请求,等待执行完成,返回执行结果。如果执行时间较长,会阻塞。应用场景:必须等待执行完才能继续下一步的情况下。
异步:发出请求,直接返回,在另个线程执行。这个不会阻塞,但得到的回复并不是实际的执行结果,一般还需要在次去查询(或者主动通知)真正的执行结果。
例:买东西回家这个过程
同步:自己去商店买东西,交了钱,等待老板把货交给你,你收货,然后回家。
异步:自己去商店买东西,交了钱,告诉老板找到货后直接送到你家,你直接回家(但你不知道货啥时候能到)。 后来老板送货到家。
二者实现的结果都是货到家,差别就在于自己何时到家(或者说自己在家外耗费了多久)。
同步,异步一般应用在提供的API函数接口上。
同步接口以阻塞方式,直到任务完成,返回任务结果。
异步接口直接返回结果(一般表明已经收到任务命令,但还未执行),后续会以主动通知或者查询方式来通知任务是否完成。
同步,异步各有优缺点,看具体需求使用吧。
同步和异步不能简单地区分是依次执行还是同时执行,这是你看上去的直观感受,是幻觉,也是错觉。建议回头看一下操作系统,先区分进程和线程,了解什么叫抢占式多任务操作系统,同步和异步概念是什么,异步和多线程有什么关系,再看看单核和多核CPU的工作原理,问题迎刃而解。
同步就是1个线程知道另一个线程运行到哪里了.异步就是1个线程不知道另一个线程运行到哪里了.
这种以单独应用来学习一个知识点的方式个人认为非常不可取
学习线程你只要学习下winform开发就好了。。当你点击一下按钮,执行的东西很长时。。卡死在那,你就自然而然的会想到用线种去处理了。