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

异步编程:线程概述及使用

飞瞥讶滴Golang 在设计上另辟蹊径,其并发哲学的核心信条是:“不要通过共享内存来通信,而要通过通信来共享内存。” (Do not communicate by sharing memory; instead, share memory by communicating.) 这一理念源自通信顺序进程(Communicating Sequential Processes, CSP)理论。

共享消息模型

在共享消息模型(Show Message Model)中,线程或进程通过消息的发送与接收来实现通信与协同。这一模型的最大亮点在于,它能有效规避数据竞争及其他并发问题。原因在于,每个线程或进程都拥有独立的内存空间,无需借助锁或其他同步机制。

该模型的另一显著特征是,消息的发送与接收是异步进行的。这意味着,一个线程或进程在发出消息后,无需等待接收方处理,即可继续执行其他任务。这种异步特性极大地提升了并发性能,因为线程或进程不会因等待消息收发而陷入阻塞。

在该模型中,开发者的角色从“卫兵”转变为“流程设计师”或“编舞家”。他的核心任务不再是保护数据,而是设计高效、无误的数据流管道。通过精心编排数据在进程或线程间的流动顺序,隐式地构建了操作间的因果关系。

程序的确定性,并非来自于对资源的加锁,而是源于消息传递所建立的自然时序。这种模型将并发的复杂性从“管理状态”转移到了“编排通信”,使得并发逻辑更清晰,也更易于推理。

image

通信顺序进程

通信顺序进程(Communicating Sequential Process,CSP)是 Tony Hoare 在 1978 年提出的一种描述并发系统交互的模式,它正是Golang并发模型的灵感源泉。该模型强调通过通信来协调进程之间的交互,而不是共享数据。

CSP模型,包含进程(Process)?和通道(Channel)?两个概念。

1)进程:进程是并发系统中的基本执行单元。每个进程都有自己的独立执行流,并且通过通信进行交互。

? 2)通道:通道是进程之间进行通信的媒介。它可以看作是一个先进先出的队列,进程可以向通道发送消息或从通道接收消息。

当进程向通道中发送消息,如果通道已满,则发送操作会阻塞,直到通道有足够的空间;当进程从通道中接收消息,如果通道为空,则接收操作会阻塞,直到通道中有消息可用。

image

CSP模型的关键特性是,进程的执行不会受到其他进程的直接影响,进程间的交互仅通过通道发送和接收消息来实现。这意味着进程的内部状态对其他进程是不可见的,从而降低了并发编程的复杂性。

Golang通过轻量级的Goroutine和通信机制Channel,实现了CSP模型的核心思想,即通过消息传递而非共享内存实现并发控制。

1)Goroutine:Goroutine 是Golang的轻量级协程。创建一个新的 Goroutine 非常简单,只需在函数调用前加上关键字 go。由于 Goroutine 的创建和切换成本非常低,所以在 Golang中可以创建大量的 Goroutine 来处理并发任务。

// 通过关键字go,创建一个Goroutine并执行异步函数

go func() {

// todo

}()

2)Channel:Channel提供了一种在 Goroutine 之间进行通信的机制。可以从一个Goroutine将数据发送到 Channel,然后另一个 Goroutine 中从 Channel 接收这个数据。

在Golang中,Goroutine代表并发的实体,它们各自独立地执行任务;而Channel则用于在Goroutine之间传递消息,协调它们之间的工作。

image

未完待续很高兴与你相遇!如果你喜欢本文内容,记得关注哦

http://www.jsqmd.com/news/449976/

相关文章:

  • 黄岩异宠医生推荐,2026年2月靠谱之选!狗狗绝育/宠物腹腔镜绝育/24小时宠物医院/猫咪绝育,异宠医生找哪家 - 品牌推荐师
  • 怎么看待移动互联网时代
  • python+uniapp校园活动预约匹配系统 学习打卡交流小程序
  • 从开发者角度看Android 和 IOS的前景
  • 分享2026年高性价比抛丸机厂家,价格多少钱 - 工业品网
  • 浅谈SQL Server中的三种物理连接操作
  • 亲测好用!自考必备降AIGC工具 —— 千笔·降AI率助手
  • 探讨上海地区静音房设计定制公司选购要点及推荐排名 - 工业品牌热点
  • git寻根——^和~的区别
  • 电动汽车充电站优化配置方法研究与实现:以matlab为工具,集成cplex和gurobi求解器...
  • 2026年常州口碑好的文旅园区排名,了解纸飞机艺术岛研发能力 - mypinpai
  • 能源企业智能巡检如何用HTML5保障无人机视频文件夹分片上传的校验?
  • 我设计的网站的分布式架构
  • HTTP协议之状态码详解
  • 瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
  • 基于VS Fakes框架的TDD实战——接口模拟
  • MVVM(Knockout.js)的新尝试:多个Page,一个ViewModel
  • 谁懂!春节携程任我行礼品卡回收指南太香啦! - 京顺回收
  • 协议森林 涅槃 (TCP重新发送)
  • 在.net中读写XML方法的总结
  • 【原创】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
  • 2026年北京离婚房产律师电话查询推荐:高效解决房产分割难题 - 品牌推荐
  • APUE笔记:Daemon Processes(十三) - Invinc
  • 选择HttpHandler还是HttpModule?
  • 截止到26年03月当前主流的几款简历工具汇总
  • 计算机毕业设计springboot儿童教育管理系统 基于SpringBoot的少儿培训机构综合运营服务平台 SpringBoot驱动的早期教育数字化管理与家校互动系统
  • 闲谈.Net类型之public的不public,fixed的不能fixed
  • 如何设计一门语言(三)——什么是坑(面向对象和异常处理)
  • 高升搬家电话查询:获取官方联系方式的途径 - 品牌推荐
  • 细说ASP.NET Forms身份认证