当前位置: 首页 > news >正文

Go 语言并发--高级概述

        对于许多不处理并发程序的人(甚至也包括一些需要处理并发程序的人)来说,并发 (concurrency) 与并行 ( parallelism )就是一回事。在日常口语中,人们通常对它们并不加以区分,但计算机科学家和软件工程师之所以如此重视开发和并行的区别,是有一些明显原因的。

1. 并发和并行

        曾经有一段时间,并发和并行在计算机科学中意味着一回事,但那个时代现在已经一去不复返了。许多人会告诉你并发不是什么:“并发不是并行” ,但是当谈到并发是什么时,只有一个简单的定义通常会令人费解。并发的不同定义给出了该概念的不同方面,因为并发并不是现实世界的运作方式。现实世界是并行的。我将尝试总结一些并发背后的核心思想,希望你能够充分理解它的抽象本质,以便能够应用它来解决实际问题。

        我们周围的许多事物都是同时独立运作的。你周围可能有人只管自扫门前雪,有时他们也会与你以及彼此之间进行互动。所有这些事情都是并行(parallel) 发生的,因此并行性是思考多个独立事物之间相互作用的自然方式。

        你如果观察某个人在一群人中的行为,就会发现事情是更加有顺序的 (sequential):这个人在做完一件事之后再做另一件事,并且可能与群体中的其他人进行互动,所有这些都是按顺序进行的。这非常类似于分布式系统中多个程序之间的交互,或多线程程序中一个程序的多个线程之间交互。

        在计算机科学中,人们普遍认为并发性的研究始于 Edsger Dijkstra 的工作,特别是他于 1965 年发表的题为 《并发编程控制问题的解决方案》的仅有一页纸的论文。这篇论文讨论了一个涉及 N 台计算机共享内存的互斥问题。这是一个非常巧妙的描述,强调了并发和并行之间的区别:它谈到了 “并发编程” (concurrent programming) 和 “并行执行” (parallel execution)。并发与程序的编写方式有关,而并行则与程序的运行方式有关。

        尽管这在当时主要是一项学术活动,但并发领域多年来不断发展,并延伸到许多不同但相关的分支主题,包括硬件设计、分布式系统、嵌入式系统、数据库和云计算等。由于硬件技术的进步,它现在已成为每个软件工程师必备的核心技能之一。

        如今,多核处理器已成为常态,它们本质上是封装在单个芯片上的多个处理器,通常共享内存。这些多核处理器用于为基于云的应用程序提供支持的数据中心,在这些应用程序中,某人可以在几分钟内配置通过网络连接的数百台计算机,让它们为应用程序工作,并在工作负载完成后销毁应用程序进程。

        相同的并发原则也适用于在分布式系统的多台机器上运行的应用程序,在笔记本计算机的多核处理器上运行的应用程序,以及在单核系统上运行的

相关文章:

  • 11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai
  • 探索Python的工业通信之光:pymodbus的奇妙之旅
  • STM32时钟树配置
  • linux dig域名DNS 查询与iptables域名ip访问流量限制
  • 元素设置了sticky粘性布局后,关于滚动后怎么样让这个元素自动添加阴影,我用自定义指令实现
  • 4.3 数据操作语言(DML):增删改查操作
  • 牛客网SQL进阶135 :每个6/7级用户活跃情况
  • 【c++】通过Privilege类来保护数据
  • 【layui】layer弹出图片层(开启图片旋转 放大 缩小 还原)
  • PostgreSQL常用命令,启动连接,pg_dump导入导出
  • Python模块篇(五)
  • 2408d,加@GC作为函数属性
  • Java基于数据库、乐观锁、悲观锁、Redis、Zookeeper分布式锁的简单案例实现(保姆级教程)
  • 面试题:MQ
  • seata的使用(SpringBoot项目整合seata)
  • 【mysql】环境安装、服务启动、密码设置
  • Gradle 5.0 正式版发布
  • HomeBrew常规使用教程
  • leetcode386. Lexicographical Numbers
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • SegmentFault 2015 Top Rank
  • Service Worker
  • SpringBoot 实战 (三) | 配置文件详解
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 彻底搞懂浏览器Event-loop
  • 好的网址,关于.net 4.0 ,vs 2010
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端面试之CSS3新特性
  • 全栈开发——Linux
  • 手写一个CommonJS打包工具(一)
  • HanLP分词命名实体提取详解
  • MyCAT水平分库
  • # 数据结构
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (4)STL算法之比较
  • (55)MOS管专题--->(10)MOS管的封装
  • (ZT)一个美国文科博士的YardLife
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (五)关系数据库标准语言SQL
  • **CI中自动类加载的用法总结
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件使用
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net打印*三角形
  • .net反编译工具
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET性能优化(文摘)
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!