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

烹饪的方式是相同的,但煮咖啡的方式是相同的。

同步任务:烹饪,专注时间3 分钟。

类似功能:立即煮咖啡。

项目:火锅店,2 01 8
我自己验证,我不确定,但这是我的经验。

称一下体重。

C#中异步和多线程的区别

哎,说起C中的异步和多线程,虽然可以避免线程阻塞,提高软件响应能力,但是本质上还是有很大区别的。

我们先来说一下异步操作。
为此我们必须从硬件入手。
例如,DMA(直接内存访问)允许硬件直接与内存交换数据,而不需要CPU干预。
就好像你正在打电话,有人替你接听电话,这样你就可以做其他事情了。
它是异步操作的硬件基础。
因此,即使在DOS这样的系统中也可以实现异步操作。

多线程怎么样?这实际上是操作系统提供的一个功能。
线程是一段并发运行的代码,必须由操作系统管理。
就像家里有多个孩子一样。
你必须一一地玩,你必须投入时间和精力。

说到这里,我想谈谈异步操作的优点和缺点。
优点是不需要额外的线程负担,并且使用回调处理可以减少共享变量的数量,降低死锁的风险。
但缺点是编写复杂,调试困难。

多线程怎么样?优点是编程简单,符合人们的思维习惯。
但缺点是使用不当会带来上下文切换的负担,还可能因共享变量而造成死锁。

如何使用?一般来说,I/O操作适合异步操作,例如文件读写、网络请求等。
在需要长时间CPU操作的情况下,例如图形处理和算法执行,则使用多线程。

但是,很多人喜欢使用线程来处理耗时的I/O操作,这实际上是不合适的,尤其是在处理大量并发操作时。
当时我也有过类似的困惑,但后来我渐渐明白了真相。

c#异步和多线程有什么区别和联系?

异步和多线程没有必然联系,异步可以通过多线程来实现。

说白了,CPU是顺序执行代码的。
但这是低效的。
CPU 始终等待用户、磁盘和网络输入。

然后引入异步机制。
CPU不会傻傻地等待,先做其他事情。
数据准备好,硬件中断提醒CPU进行处理。

操作系统封装了底层并提供多线程事件和概念。
允许开发人员利用异步性。

多线程是一个操作系统概念。
实现方法:增加CPU核或者切换CPU轮询。

不同的系统、语言和框架以不同的方式对待异步和多线程处理。
但这是原则。

当我们编写代码时,我们向CPU发出指令。
同步是CPU需要立即做的事情。
异步意味着CPU可以找到助手并继续做其他事情。

使用的方法取决于系统、语言和框架如何支持它。

委托与线程在C#编程中的应用及选择

记得刚开始写C程序的时候,对于线程和委托还是很头疼的。
我记得那是2 01 3 年,我正在开发一个小型网络爬虫。
那时我还是个新手,对这两件事完全困惑。

当时我希望爬虫能够在网页下载时解析内容,所以我在代码中添加了委托和线程。
我认为线程就像一个多任务处理大师,可以解决我的问题。
然而,结果却让人头疼。
记得有一次,我在北京的时候,程序突然崩溃了。
当我打开任务管理器时,我发现CPU使用率飙升,内存已满。

后来我花了大半天的时间研究,发现是因为我创建了很多循环线程,消耗了程序太多的资源。
我当时就想,如果这个线程不能用好,那就是一个陷阱。
然而,我还发现,如果使用得当,线程也可以成为多任务处理的产物。

后来我改变了主意,使用委托来处理事件。
例如,我设置了下载完成后的回调函数,这样一旦下载任务完成,我就可以立即扫描内容,无需等待。
我记得是在上海的一个技术会议上,一个大佬告诉我要这样用。
他说这被称为“回调机制”,这非常聪明。

后来开始学习Task和async/await,发现处理异步操作和管理任务变得简单多了。
我记得那是2 01 6 年,我在深圳参加了C培训课程。
教授推荐了这个方法,说这是现代C的趋势,我也跟着做了,发现我的效率提高了很多。

我现在通常使用 async/await。
不仅可以处理异步,而且代码看起来也很清爽。
比如我挖矿的时候,使用HttpClient进行异步网络请求,然后通过wait等待结果。
结果出来就分析内容,效率很高,代码也简洁。

总之,在C编程中,委托和线程是好东西,但是你必须在正确的地方使用它们。
看台踩多了就知道怎么玩了。
呵呵,这是我的个人经历。