2026/2/8 18:09:15
网站建设
项目流程
陕西营销型网站建设,百度浏览器官网,广州楼市最新消息,程序开发软件有哪些我发现一个普遍的困惑点浮现出来#xff0c;其根源在于混淆了“并发”、“并行”与“异步”#xff0c;特别是下意识地将异步等同于利用多核CPU进行并行处理。
为了彻底澄清这些基础但至关重要的概念#xff0c;我们深入剖析理论原则并且同时抛开我们日常使用的现代框架其根源在于混淆了“并发”、“并行”与“异步”特别是下意识地将异步等同于利用多核CPU进行并行处理。为了彻底澄清这些基础但至关重要的概念我们深入剖析理论原则并且同时抛开我们日常使用的现代框架如.NET中的具体实现这往往会误导以辨析并发Concurrency、并行parallel和异步Asynchronous这三个核心概念。核心概念解析什么是并发Concurrency定义 并发是指一个系统有能力在一段时间内处理多个任务。这些任务的执行在宏观上是重叠的但在微观上是通过任务的交替执行实现的。精髓 Go语言之父 Rob Pike 对此有非常精辟的论述“Concurrency is about dealing with lots of things at once.”并发是关于处理多件事情的能力。这里的关键词是“dealing with”处理它强调的是一种程序结构使其能够应对和管理多个任务流。举例说明 一个餐厅突然来了三个客人但餐厅只有一个服务员。从服务员的角度来看他需要同时服务这些客人。当然这是宏观上的同时因为服务员执行事件的速度是在是太慢了。什么是并行parallel定义 并行是指系统能够在同一物理时刻真正地同时执行多个任务。前提 并行必须依赖于多核CPU。在多核处理器上每个核心可以在完全相同的时刻独立地执行一个不同的任务指令实现物理意义上的“同时”。精髓 同样引用 Rob Pike 的论述进行对比“parallel is about doing lots of things at once.”并行是关于完成多件事情的能力。这里的关键词是“doing”完成强调的是物理上的同时执行是真正意义上的“一起做”。举例 还是餐厅的例子一个餐厅突然来了三个客人餐厅这次有3个服务员每个服务员正好服务一位客人。这就是并行。什么是异步Asynchronous定义 异步是一种编程模型或模式其核心思想是非阻塞Non-blocking。它描述的是一种调用行为尤其在处理耗时的I/O操作时如网络请求、数据库查询、文件读写显得至关重要。机制 当一个线程发起一个异步I/O操作时例如在.NET中调用 await client.GetStringAsync(...)它并不会原地阻塞等待。实际发生的过程是该线程向操作系统发出I/O请求然后立即返回。这个宝贵的线程被释放回线程池可以立即去处理其他的工作比如响应另一个用户的请求。CPU完全没有被闲置。I/O操作由硬件如网卡、磁盘控制器独立完成。当操作完成后硬件会向CPU发送一个中断信号。操作系统捕获这个中断并将一个完成事件排入队列。线程池中的某个可用线程会取出这个事件并从之前 await 的地方继续执行后续代码。目的 异步的主要目标是避免在等待I/O密集型操作时浪费昂贵的线程资源从而用少量的线程实现极高的系统吞吐量和可伸缩性例如处理成千上万的并发网络连接。它关注的是调用方的线程是否被阻塞而非任务是否在多核上同时运行。误区澄清 “Asynchronous is not Concurrency.”异步不是并发。这是一个极其重要的区分。异步是一种允许代码以非线性多任务角度顺序正确执行的属性它能够用来实现并发但其本身并非并发。异步可以在单线程上实现一个线程发起请求后去做别的事而并行则必须是多个线程在多个CPU核心上同时执行。举例 还是餐厅的例子一个餐厅同时来了三个客人三个服务员每人一个客人。服务员在下完单后有两个选择同步在后厨门口傻等直到出餐后送到客人桌上。异步下单后马上去接待其他客人或者处理其他事情等后厨对讲机里通知菜烧好了才去取餐送餐。这里请大家注意 异步模型我们强调的是这个服务员被释放出来了他更加灵活的调度他可以做更多的事来提高餐厅的运行效率。至于后厨做菜这件事是一个厨师来做还是十个厨师来做那是如何更快的做菜的问题。这跟异步还是同步没有关系。同步模式下做菜这件事也可以请十个厨师来做而加快出餐的速度。三者的关系与区别为了更直观地理解它们我们可以通过一个表格来对比总结总而言之并发、并行和异步是从不同维度描述任务执行方式的概念。并发是一种程序设计结构使其能够逻辑上处理多个任务并行是利用硬件多核CPU在物理上同时执行多个任务的计算能力而异步是一种编程范式通过非阻塞IO调用来极致地提高系统资源的利用率。文章转载自Agile.Zhou原文链接https://www.cnblogs.com/kklldog/p/19474533体验地址http://www.jnpfsoft.com/?from001YH