C# 多线程、异步、同步之间的联系与区别

C# 多线程、异步、同步之间的联系与区别

假设这样一个例子:
我想炒五样菜,可是只有两个炉子能够用,只能同时炒两样。

炉子就是线程,那同步跟异步怎么解释比较好?

同时炒是否是算异步?

若是是的话,那什么状况算同步?

 其结果是:
假如5个菜分别是A,B,C,D,E  你有两个炉子  只能同时炒A跟B    
因此剩下的CDE只能等AB炒完了才能开始 这个等待就是同步 咱们叫作阻塞 即这个时候你只能作AB这两个菜

假如你还有一台咖啡机, 你在炒AB的时候 把咖啡豆跟水放到咖啡机里打开开关 你就能够不用去管它了
咱们说 咱们新开了一个线程煮咖啡 可是注咖啡这个动做不妨碍你炒菜 因此煮咖啡这个线程是异步的 咱们叫非阻塞

等到咖啡机 叮--- 告诉你咖啡煮好了 这个时候你去把咖啡拿出来 叮的这一声 咱们叫通知 通知主线程也就是你 我(咖啡机)的工做作完了, 你去把咖啡拿出来 咱们叫回调 也就是 咖啡机线程完成以后 通知主线程要作的动做

简单来说 会占用你的时间 让你没法作其它事情的任务 叫同步任务(炒菜要专一 否则可能会糊锅)。
那些不须要占用你的时间的任务 叫异步任务 咖啡机本身会把咖啡煮好 不须要你一直看着它
备注: 
所谓的多线程,意思就是说能够看起来像是同时在执行一系列的操做,而每一个线程则负责维护本身的线程堆栈以及执行本身的代码;
而异步则是基于多线程的。异步意思是说一个操做在执行时不会阻止其它的线程(或者主线程)工做,同步相反;可是若是异步操做会访问到一些资源,而这些资源有可能会在一个线程在修改它的时候被另一个线程读取,因而这样得出的结果就会彻底坑爹了。因此说对这种资源的保护(叫作 线程安全或者资源独占)是一个很重要的数据保护措施。
相关文章
相关标签/搜索