C# c语言中多线程和异步程序的区别#
我最初在Stackoverflow和google中搜索过类似的问题。只有一个链接给出了一些观点,但我不能清楚地理解。[] 以下问题困扰着我:C# c语言中多线程和异步程序的区别#,c#,multithreading,asynchronous,C#,Multithreading,Asynchronous,我最初在Stackoverflow和google中搜索过类似的问题。只有一个链接给出了一些观点,但我不能清楚地理解。[] 以下问题困扰着我: 在异步编程中,什么是真正的回调方法?是 代表 异步程序的实现是使用多线程 如果能提供图片来解释,我将不胜感激 []1)回调基本上是传递给过程的委托,该过程将在某个适当的点“回调”。例如,在WebRequest.BeginGetResponse或WCF BeginXxx操作等异步调用中,您将传递一个异步回调。工作程序将“回调”您作为AsyncCallbac
[]1)回调基本上是传递给过程的委托,该过程将在某个适当的点“回调”。例如,在WebRequest.BeginGetResponse或WCF BeginXxx操作等异步调用中,您将传递一个异步回调。工作程序将“回调”您作为AsyncCallback传入的任何方法,在本例中,当它完成时,让您知道它已经完成并获得结果 2) 多线程是程序运行的不同部分,通常称为线程 异步编程使用线程启动一段代码。因此,异步编程依赖于多线程来工作。请参阅以下链接:
多线程和异步编程之间的区别在于,在多线程中,我们为函数创建一个新线程,以便只执行或完成此函数或任务 异步编程也使用多线程,但方式不同 在异步中,工作或任务被划分为多个线程 例如,如果我们有4个任务 如果我们使用多线程并按如下方式分配线程
Thread1 = task1
Thread2 = task2
Thread3 = task3
Thread4 = task4
但是当我们使用异步编程模型时
我们不必分配线程
任务在线程之间自动划分
可以根据需要使用单线程或多线程
如果它将使用单线程,那么任务1-4将同时工作
以循环方式
CPU在任务之间切换,启动一个任务运行几秒钟,然后保存其位置“上下文切换”,然后启动其他任务。
这种情况发生得如此之快,好像所有任务都在同一时间运行的幻觉
类似地,当异步模型中有多个线程时
单个任务由多个线程处理
e、 g如果task1由Thread1启动,则当Thread1不在task1上工作时,它可能在thread2或thread3上运行
这就是异步编程的美妙之处
我认为这是对初学者最好的解释
单螺纹阻塞
为了理解异步/并发/多线程,我们需要从最基本的知识开始,以及为什么我们要给这个问题增加如此多的复杂性
起初,只有真正的单线程阻塞应用程序。这些都是非常简单的程序,而且很可能是您现在正在编写的程序
为了解释,我将使用比萨饼店的类比
假设你的电脑是一个只有一名员工的比萨饼店。他只受过基本训练
你走进商店,与员工交谈,看菜单,点比萨饼
太好了。员工走进商店的后面,把一个比萨饼放在烤箱里,站在烤箱旁边等待比萨饼烹饪
你记得你妻子不喜欢菠萝。你对试图引起员工注意改变订单的员工大喊大叫。没有骰子。他在烤箱前一动不动(他睡着了)
你生气了就走
多线程并发阻塞
你去下一家比萨饼店
它有4名员工
你走进商店,与员工交谈,看菜单,点比萨饼
他向后面的其他员工大喊(发信息)给你做比萨饼。他们把一个放进烤箱。他站在烤箱旁边睡觉
你忘了你妻子对熏肉过敏。你告诉员工A取消比萨饼。他在屋里对厨师大叫,把他叫醒。厨师把比萨饼扔进垃圾箱,然后把一个犹太比萨饼放进烤箱。他很快又睡着了
等一下,比萨饼准备好了,你会收到账单的。其规模巨大(雇佣了太多员工,其中一半人在工作中睡觉)
单线程异步/非阻塞
你去下一家比萨饼店
它有一名员工
你走进商店,与员工交谈,看菜单,点比萨饼
他走进去,把比萨饼放进烤箱。然后,他将收据(回调)附在比萨饼上。他走回柜台
你记得你妻子这个月其实不吃肉。你告诉员工,他进去解决问题
在员工检查内部是否有一个做过的比萨饼后。然后他看了收据(把这个比萨饼给鲍勃)
您可以买到便宜、价格合理、响应速度快的比萨饼。异步并不总是意味着多线程。-布朗大学。不同之处在于并发性在codeproject上有一篇好文章,请