Golang的高并发

Golang的高并发

Golang的调度器有三个核心的元素:

  1. 物理处理器
  2. 逻辑处理器
  3. goroutine

物理处理器更接近cpu核的概念,主要包括

  1. 调度线程来运行。
  2. 分配逻辑处理器的基础, 每个物理处理器默认分配一个逻辑处理器。
  3. 实现并行运行的关键。

逻辑处理器:

  1. 线程和逻辑处理器来绑定.
  2. 从本地队列调度goroutine来运行。
  3. 运行goroutine。

goroutine:编程端的任务

goroutine调度的核心机制:
Go调度器管理goroutine
逻辑处理器是Golang编译器实现的非常灵活的异步调度goroutine的核心处理器。Golang高并发是协程的机制也是基于此核心处理器的功能。

逻辑处理器需要线程来绑定的【底层依赖线程】,Go语言限制每个程序最多1000个线程, 基于此核心机制,即使单个的逻辑处理器也能调度无数个goroutine高效运行。

实际上,可以支持多个逻辑处理器。
并发和并行的区别
上图这里将的是针对Golang的并发和并行,实际上广义的并发概念是包括并行的,还是看我们所看问题的角度,如果针对CPU和任务,那这些都是并发。如果再究其细节,两个逻辑处理器和一个逻辑处理器的区别,那么从单位时间角度考虑,我们可以说两个逻辑处理器在执行任务方面达到了并行。

支持多个逻辑处理器能达到并行的效果, 并行的效果还需要计算机拥有多个物理处理器,其实还是每个物理处理器分配一个逻辑处理器,不然的就是逻辑处理器在线程间切换,线程又只在一个CPU核上不断的轮训, 达不到真正并行的效果。

多个逻辑处理器适配多个物理处理器才能实现多cpu核心的利用。现在的计算机都是多核心的,所以golang能充分的利用CPU的资源。

一些概念来自《Go语言实战》
有需要这本电子书的可以私信我,我已经将此书熟读两遍了,质量还是不错的,有笔记的版本和无笔记的版本我都有。

golang中,高并发项目实战可以通过使用goroutines和channels来实现。其中,goroutines是轻量级的线程,可以并发执行多个任务,而channels则用于goroutines之间的通信。 一个常见的高并发项目实战是使用golang开发网络爬虫。网络爬虫是一种通过自动化程序浏览互联网,并从网页中提取数据的技术。在golang中,可以使用第三方的爬虫框架来简化开发过程,如引用所提到的爬虫框架。 在这个项目中,可以将爬虫框架的处理模块分为下载器、分析器和条目处理器。下载器负责从指定的URL下载网页内容,分析器用于解析网页并提取需要的数据,而条目处理器则对提取的数据进行处理。此外,还需要一个调度和协调这些处理模块运行的控制模块来确保它们按照预期的方式运行。 为了实现高并发,可以将每个任务(即要爬取的URL)分配给一个goroutine来执行。可以使用goroutine和channel的组合来实现任务的并发执行和结果的收集。引用中给出了一个示例函数CheckWebsites,该函数接收一个WebsiteChecker函数和一个URL列表,并返回一个映射,其中URL与检查结果对应。 在该示例函数中,使用了一个resultChannel来收集每个URL的检查结果。通过使用goroutine,在遍历URL列表时,可以将每个URL的检查结果发送到resultChannel中。然后,通过在循环中使用<-resultChannel来接收结果,并将结果存储在一个map中。 通过这种方式,可以实现高并发的URL检查,并在所有检查完成后返回结果。 总之,golang高并发项目实战可以通过使用goroutines和channels来实现并发执行任务和结果的收集。网络爬虫是一个常见的高并发项目实战示例,通过使用爬虫框架和适当的并发控制,可以实现高效的网页数据提取。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [golang GRPC 高并发实战1:基础环境搭建](https://blog.youkuaiyun.com/xatop/article/details/123326480)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [golang爬虫框架,golang高并发实战](https://download.youkuaiyun.com/download/weixin_44772356/87273641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [golang高并发的思想与实践](https://blog.youkuaiyun.com/m0_58181788/article/details/123938547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值