iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang中的并发和并行
  • 581
分享到

golang中的并发和并行

2024-04-02 19:04:59 581人浏览 安东尼
摘要

golang中默认使用一个CPU,这时程序无法并发,只能是并发。因为始终只有一个CPU在运行。 package main import ( "fmt"

golang中默认使用一个CPU,这时程序无法并发,只能是并发。因为始终只有一个CPU在运行。


package main 
import (
        "fmt"
        "runtime"
)
 
//并发和并行
var quit chan int = make(chan int) 
func loop() {
        for i := 0; i < 100; i++ { //为了观察,跑多些
                fmt.Printf("%d ", i)
        }
        quit <- 0
}
 
func main() {
        runtime.GoMAXPROCS(2) // 最多使用2个核
 
        go loop()
        go loop()
 
        for i := 0; i < 2; i++ {
                <- quit
        }
}

runtime.GOMAXPROCS(2) 设置使用2个CPU,这才真正是并行。

补充:Go多核并行化

通过goroutine创建相同逻辑CPU核心个数的协程,将求和列表分段,分别计算后汇总。

通过runtime.NUMCPU()获得逻辑CPU个数,并计算每个协程中计算列表的下标,计算完成后,向channel中写入1。

通过向channel中读取int的个数,判断协程运行是否全部完成,之后求和即可。


package main
import (
	"fmt"
	"runtime"
)
type Vector []float64
func (v Vector) DoSome(p, i, n int, u Vector, c chan int) {
	sum := 0.0
	for ; i < n; i++ {
		sum += u[i]
	}
	v[p] = sum
	c <- 1
}
const NCPU = 4
func (v Vector) DoAll(u Vector) {
	c := make(chan int, NCPU)
	for i := 0; i < NCPU; i++ {
		fmt.Println(i, i*len(u)/NCPU, (i+1)*len(u)/NCPU)
		go v.DoSome(i, i*len(u)/NCPU, (i+1)*len(u)/NCPU, u, c)
	}
	for i := 0; i < NCPU; i++ {
		<-c
	}
	sum := 0.0
	for _, value := range v {
		sum += value
	}
	fmt.Println(sum)
}
func main() {
	u := make([]float64, 64)
	for i := 0; i < 64; i++ {
		u[i] = float64(i)
	}
	var v Vector = make([]float64, NCPU)
	v.DoAll(u)
	ncpu := runtime.NumCPU()
	fmt.Println(ncpu)
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: golang中的并发和并行

本文链接: https://www.lsjlt.com/news/125411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang中的并发和并行
    golang中默认使用一个CPU,这时程序无法并发,只能是并发。因为始终只有一个CPU在运行。 package main import ( "fmt" ...
    99+
    2024-04-02
  • golang中并发和并行的示例分析
    这篇文章主要介绍了golang中并发和并行的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是golanggolang 是Google开发的一种静态强类型、编译型、...
    99+
    2023-06-15
  • Golang - 并发、并行、顺序
    php小编西瓜为您介绍Golang中的并发、并行和顺序三个重要概念。在并发编程中,Golang提供了丰富的工具和语法来实现并发操作,使得程序能够同时处理多个任务。而并行编程则是同时执行...
    99+
    2024-02-10
  • Golang中的任务并发执行和Go WaitGroup
    在Golang中,任务的并发执行可以通过goroutine和channel来实现。Goroutine是轻量级的线程,可以并发执行多个...
    99+
    2023-10-09
    Golang
  • Go中并发和并行的区别有哪些
    这篇文章主要介绍了Go中并发和并行的区别有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go中并发和并行的区别有哪些文章都会有所收获,下面我们一起来看看吧。并发和并行的区别:1、并发是把任务在不同的时间点交...
    99+
    2023-07-05
  • Golang中的并发控制和Go WaitGroup
    在Golang中,可以使用并发控制来管理多个goroutine的执行。其中,一个常见的并发控制机制是使用`sync.WaitGrou...
    99+
    2023-10-08
    Golang
  • java中并发和并行的概念是什么
    这篇文章主要介绍了java中并发和并行的概念是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可...
    99+
    2023-06-14
  • PHP开发中如何优化并发执行和并行计算
    随着互联网应用的发展,对于程序的性能要求越来越高,特别是在并发执行和并行计算方面。在PHP开发中,如何优化并发执行和并行计算成为了一个重要的课题。本文将介绍一些优化技巧,并给出具体的代码示例。使用异步编程模型在PHP中,可以通过使用异步编程...
    99+
    2023-10-21
    并发执行优化 并行计算优化 PHP开发优化技巧
  • Go语言中并发和并行的差异探究
    Go语言中并发和并行的差异探究 在Go语言中,经常会听到并发(concurrency)和并行(parallelism)这两个概念。虽然这两个词经常被混淆使用,但它们其实有着不同的含义。...
    99+
    2024-03-12
    go语言 并发 并行
  • 并发编程指南:探索Golang标准库中的并行性
    Golang标准库中的并发编程指南 引言:并发编程是一种解决程序性能问题和实现高效利用计算资源的重要手段。在Golang编程语言中,提供了丰富的并发编程工具和方法。本文将介绍Golang标准库中的一些常用并发...
    99+
    2024-01-20
    Golang 并发编程 标准库
  • Go中并发和并行编程的权衡利弊
    并发和并行编程在 go 中的权衡利弊:并发:适合低延迟响应,但不能充分利用多核,可能导致数据竞争。并行:充分利用多核,但开销较高,需做好共享状态同步。 Go 中并发和并行编程的权衡利弊...
    99+
    2024-05-12
    并发 并行
  • golang 实现并发求和
    使用golang并发求和,作为对golang并发的一个练习. 为了验证结果的正确性,要给出最传统的版本: func sum1(data []int) int { s := 0 ...
    99+
    2024-04-02
  • Delphi中怎么进行并发编程和并行计算
    在Delphi中进行并发编程和并行计算可以使用多线程的方式来实现。下面是一个简单的示例代码: unit MainUnit; int...
    99+
    2024-03-13
    Delphi
  • Golang函数参数传递中的并发并发症
    在并发 goroutine 修改共享参数情况下,go 函数参数传递有以下规则:按值传递:副本传递给函数,更改副本不影响原始值。按引用传递:指针传递给函数,更改指针值会同时修改原始值。按引...
    99+
    2024-04-13
    并发 函数参数传递 golang 并发访问
  • Go编程中并发和并行的区别及应用
    并发和并行是计算机领域中常见的概念,在Go编程中也有着重要的应用。本文将介绍并发和并行的区别,并结合具体的Go代码示例来说明它们在实际编程中的应用。 一、并发和并行的区别 在讨论并发和...
    99+
    2024-03-13
    go语言
  • Golang如何在高并发场景中实现任务调度和并行处理?
    在 go 语言中,任务调度可以使用 sync/cond 和 sync/waitgroup,而并行处理则通过 goroutine 实现。sync/cond 提供条件变量,用于等待条件满足再...
    99+
    2024-05-11
    golang 并发处理
  • Golang并发编程指南:探索并行处理的奥秘
    go中并发编程利用轻量级线程(goroutine)和通信机制(管道)来实现并行任务执行。同步原语(如互斥体)用于协调goroutine之间的访问。实战案例包括创建高效的并发web服务,以...
    99+
    2024-05-12
    golang 并发编程 go语言
  • Golang中的数据并发处理和Go WaitGroup
    Golang中的数据并发处理可以通过使用goroutine和channel来实现。Goroutine是一种轻量级的线程,可以在函数前...
    99+
    2023-10-08
    Golang
  • 如何使用golang函数并发控制进行并行计算
    在 go 中可以使用 goroutine 和函数并发控制实现并行计算,具体步骤如下:创建 goroutine,使用 go 关键字创建轻量级并发执行单元。使用 sync.waitgroup...
    99+
    2024-04-24
    并发控制 并行计算 golang
  • 理解Go语言中并发和并行的本质差异
    在学习并发编程时,经常会听到两个概念:并发(Concurrency)和并行(Parallelism)。尽管这两个术语有时被混淆使用,但它们实际上代表着两种不同的概念。在Go语言中,理解...
    99+
    2024-03-12
    go语言 并发 并行
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作