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

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

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

同时炒是不是算异步?

如果是的话,那什么情况算同步?

 

 其结果是:
假如5个菜分别是A,B,C,D,E  你有两个炉子  只能同时炒A跟B    
所以剩下的CDE只能等AB炒完了才能开始 这个等待就是同步 我们叫做阻塞 即这个时候你只能做AB这两个菜 假如你还有一台咖啡机, 你在炒AB的时候 把咖啡豆跟水放到咖啡机里打开开关 你就可以不用去管它了
我们说 我们新开了一个线程煮咖啡 但是注咖啡这个动作不妨碍你炒菜 所以煮咖啡这个线程是异步的 我们叫非阻塞 等到咖啡机 叮--- 告诉你咖啡煮好了 这个时候你去把咖啡拿出来 叮的这一声 我们叫通知 通知主线程也就是你 我(咖啡机)的工作做完了, 你去把咖啡拿出来 我们叫回调 也就是 咖啡机线程完成之后 通知主线程要做的动作 简单来讲 会占用你的时间 让你无法做其它事情的任务 叫同步任务(炒菜要专注 不然可能会糊锅)。
那些不需要占用你的时间的任务 叫异步任务 咖啡机自己会把咖啡煮好 不需要你一直看着它
备注: 
所谓的多线程,意思就是说可以看起来像是同时在执行一系列的操作,而每个线程则负责维护自己的线程堆栈以及执行自己的代码;
而异步则是基于多线程的。异步意思是说一个操作在执行时不会阻止其它的线程(或者主线程)工作,同步相反;但是如果异步操作会访问到一些资源,而这些资源有可能会在一个线程在修改它的时候被另外一个线程读取,于是这样得出的结果就会完全坑爹了。所以说对这种资源的保护(叫做线程安全或者资源独占)是一个很重要的数据保护措施。
 
 

C# 多线程、异步、同步之间的联系与区别的更多相关文章

  1. 【转】【玩转cocos2d-x之二十三】多线程和同步03-图片异步加载

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/15334159 cocos2d-x中和Android,Windows都 一样, ...

  2. boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

    一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待. //makefile #-------------------------------------------------- ...

  3. IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别参考

    参考https://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral IO复用,AI ...

  4. es内部的多线程异步并发控制

    version元数据(1)第一次创建一个document的时候,它的_version版本号是1:以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1(2)在删 ...

  5. Python 多线程、多进程 (二)之 多线程、同步、通信

    Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...

  6. 可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui)

    可扩展多线程异步Socket服务器框架EMTASS 2.0 (转自:http://blog.csdn.net/hulihui) 0 前言 >>[前言].[第1节].[第2节].[第3节]. ...

  7. C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法

    本文的目的是为了让大家了解什么是异步?什么是多线程?如何实现多线程?对于当前C#当中三种实现多线程的方法如何实现和使用?什么情景下选用哪一技术更好? 第一部分主要介绍在C#中异步(async/awai ...

  8. Java使用多线程异步执行批量更新操作

    import com.google.common.collect.Lists; import org.apache.commons.collections.CollectionUtils; impor ...

  9. Java基础知识笔记(五:多线程的同步问题)

    编写多线程程序往往是为了提高资源的利用率,或者提高程序的运行效率,或者更好地监控程序的运行过程等.多线程同步处理的目的是为了让多个线程协调地并发工作.对多线程进行同步处理可以通过同步方法和同步语句块实 ...

随机推荐

  1. MQTT版本升级过程及源码解析

    MQTT版本升级过程及源码解析 首先说一下为什么要写这篇文章呢,在我发现网上对MQTT的文章介绍实在太少了,可能也是使用这个的频率比较低吧!还有对问题的定位以及解决的方式和办法也太少了,所以特意写这篇 ...

  2. 免费试用 | 多模 NoSQL 服务GeminiDB for Cassandra 全球首发

    PS:多模NoSQL服务GeminiDB重磅公测,免费体验,参与公测还有华为AI音响好礼相送~ 7月5日,华为云多模 NoSQL 服务GeminiDB for Cassandra正式对外定向邀测.华为 ...

  3. Python微信公众号教程基础篇——收发文本消息

    1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...

  4. v-bind和v-model的本质区别和作用域

    每篇一句 一场寂寞凭谁诉.算前言,总轻负. Vue视图数据展示方式和彼此的区别: {{插值表达式}} {{}}插值表达式里面 只能写表达式,不能写语句 文本输出,不会解析标签 不能作用在标签的属性上, ...

  5. CF832D Misha, Grisha and Underground

    有一棵n个节点的树,一共q 次询问 每次询问给定3个点,求两条起点终点在这三个点上且不完全重合的路径的最多公共节点数 简单LCA求距离,令a为汇合点,那么答案就是(dis(a,b) + dis(a,c ...

  6. KafkaManager2.0.0.2安装与使用

    KafkaManager 是雅虎开源的一款 针对kafka集群的web管理工具, 具体功能和介绍就不再这细讲 kafka-manager github官网  https://github.com/ya ...

  7. Java并发编程系列-(6) Java线程池

    6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...

  8. spring data jpa 操作pipelinedb 的continuous view 与stream

    一. 由于pipelinedb是postgreSQL的扩展,因此相关依赖于配置都合集成postgreSQL是一样的. springboot + spring data jpa + postgreSQL ...

  9. CCF-CSP题解 201709-4 通信网络

    dfs #include <bits/stdc++.h> const int maxn = 1000; const int maxm = 10000; using namespace st ...

  10. SQL- SQL插入与更新删除

    一 前言 经过之前的 [SQL]-SQL介绍, [SQL]- SQL检索阶段一, [SQL]-sql检索阶段二 的三篇文章你已经学会的sql的相关概念和如何查询数据库,这篇文章主要后续对数据库表的进入 ...