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

GO并发总是更快吗?

        许多开发人员的一个误解是,并发解决方案总是比串行更快,大错特错。解决方案的整体性能取决于许多因素,例如,结构的效率(并发)、可以并行处理的部分以及计算单元的竞争程度。

1. GO调度

        线程是操作系统可以执行的最小单元。如果一个进程想要同时执行多个动作,它可以启动多个线程。这些线程可以是:

  • 并发--两个或者更多线程可以在同一时间段内启动、运行和完成。
  • 并行--同一个任务可以同时执行多次,就像多个服务员线程一样。

操作系统负责优化调度线程的那些进程:

  • 所有的线程都可以消费CPU周期,不会饥饿太久
  • 工作负载尽可能地被均匀分布在不同的CPU核上。

注意

        线程这个词在CPU级别上也可以有不同的含义。每个物理核可以由多个逻辑核(超线程的概念)组成,一个逻辑核也被称为一个线程。

        CPU内核执行不同的线程。当CPU内核的执行从一个线程切换到另一个线程的时候,会执行一个操作,叫作上下文切换。切换时,正在消费CPU周期的活动线程正处于executing状态,然后转换成runnable状态,意味着它会等待,直到有一个可用的核可以执行它。上下文切换被视为是昂贵的操作,因为操作系统需要保存要切换线程的状态(如当前寄存器的值)。

        作为Go开发者,我们不以直接创建线程,但是可以创建goroutine(协程),你可以把它看成应用级的线程。操作系统线程是由操作系统在CPU上进行的上下文切换,而goroutine是由Go运行时在操作系统线程上进行的上下文切换。此外,与操作系统线程相比,goroutine的内存占用更小:Go 1.4以后的goroutine只占用2KB(goroutine的内存占用会按需进行调整,更进一步地,Go 1.19会根据历史栈使用率来初始化goroutine栈,goroutine的内存占用不再是固定的2KB)。操作系统线程的内存占用取决于操作系统本身,例如,在Linux/x86-32中,默认的大小是2MB。较小的尺寸可使上下文切换更快。

注意

goroutine的上下文切换会比线程的上下文切换大约快 80% 到 90%,具体取决于CPU架构。

        现在让我

http://www.lryc.cn/news/337107.html

相关文章:

  • echarts折线图自定义打点标记小工具
  • 【图论】Leetcode 200. 岛屿数量【中等】
  • 酒店大厅装水离子雾化壁炉前和装后对比
  • 城市内涝与海绵城市规划设计中的水文水动力模拟
  • C++项目实战与经验分享
  • Day17_学点JavaEE_转发、重定向、Get、POST、乱码问题总结
  • Mouse IFN-α ELISA kit (Quick Test)
  • AMD Tensile 简介与示例
  • Rust语言
  • 排序算法之冒泡排序
  • js打印页面源码 ,打印选取的容器里的内容,打印指定内容
  • 算法练习第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
  • 细胞世界:4.细胞分化(划区域)与细胞衰老(设施磨损)
  • c语言:操作符
  • 谷歌seo自然搜索排名怎么提升快?
  • Golang | Leetcode Golang题解之第13题罗马数字转整数
  • 说说我理解的数据库中的Schema吧
  • nginx 如何对用户屏蔽网站首页但是对蜘蛛开放
  • 【vue】ref 和 reactive 对比
  • 爬虫现在还有那么吃香嘛?
  • MobaXterm无法登陆oracle cloud的问题
  • VLL: a lock manager redesign for main memory database systems阅读
  • REST API实战演练之JavaScript使用Rest API
  • 期货量化交易软件:MQL5 中的范畴论 (第 15 部分)函子与图论
  • 2024妈妈杯数学建模B题思路-甲骨文智能识别中原始拓片单字自动分割与识别研究
  • sql 之 索引
  • 创建基于Node的WebSocket服务
  • Flask快速搭建文件上传服务与接口
  • AI算力报告:算力大时代,AI算力产业链全景梳理
  • 点击上传文件