我正在我的VirtualBoxed Ubuntu 11.4上测试此Go代码
package main
import ("fmt";"time";"big")
var c chan *big.Int
func sum( start,stop,step int64) {
bigStop := big.NewInt(stop)
bigStep := big.NewInt(step)
bigSum := big.NewInt(0)
for i := big.NewInt(start);i.Cmp(bigStop)<0 ;i.Add(i,bigStep){
bigSum.Add(bigSum,i)
}
c<-bigSum
}
func main() {
s := big.NewInt( 0 )
n := time.Nanoseconds()
step := int64(4)
c = make( chan *big.Int , int(step))
stop := int64(100000000)
for j:=int64(0);j<step;j++{
go sum(j,stop,step)
}
for j:=int64(0);j<step;j++{
s.Add(s,<-c)
}
n = time.Nanoseconds() - n
fmt.Println(s,float64(n)/1000000000.)
}
Ubuntu可以访问我所有的4个内核。我通过同时运行几个可执行文件和系统监视器来检查这一点。但是,当我尝试运行此代码时,它仅使用一个内核,并且没有从并行处理中获得任何收益。
我做错了什么?
您可能需要查看Go
FAQ
的Concurrency部分,特别是以下两个问题,并确定哪个(如果不是两个)适用于您的情况:
为什么我的多goroutine程序不使用多个CPU?
您必须设置GOMAXPROCS shell环境变量或使用
运行时包的类似名称的函数,以允许运行时支持利用多个OS线程。执行并行计算的程序应受益于GOMAXPROCS的增加。但是,请注意并发不是并行性。
为什么使用GOMAXPROCS > 1有时会使我的程序变慢?
这取决于程序的性质。当使用多个OS线程时,包含多个goroutine且花费大量时间在通道上进行通信的程序会遇到性能下降的情况。这是因为在线程之间发送数据涉及大量上下文切换损失。
Go的goroutine调度程序不尽如人意。将来,它应该认识到这种情况并优化对OS线程的使用。目前,应基于每个应用程序设置GOMAXPROCS。
有关此主题的更多详细信息,请参见标题为“
并发不是并行性”的主题。
首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的
问题内容: 我惊讶地发现Go带有“ goto”语句。我一直被教导说,“ goto”语句已经成为过去,并且因为它阻塞了程序的实际流程,所以它变得邪恶,而函数或方法始终是控制流程的更好方法。 我肯定错过了什么。Google为什么要包含它? 问题答案: 当我们实际检查Go标准库的源代码时,我们可以看到s在哪些地方得到了很好的应用。 例如,在文件中,使用以下语句: 在从导入只是控制流使用的另一(布尔值)的
我还检查了调试,它将语句=>if(sum==1)返回true;但它也在执行更多的语句。
主要内容:多个延迟执行语句的处理顺序,使用延迟执行语句在函数退出时释放资源Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者
我需要解释一下,为什么执行了while()语句中的if()块。据说:while语句计算表达式,表达式必须返回布尔值。如果表达式的计算结果为true,则while语句将执行while块中的语句。请看一下这个代码: 一旦变量x超过5,不应该将其视为false吗?那么,如果执行块,该如何执行呢?基本上,它似乎为表达式5返回了真正的布尔值=5. 谢谢你的解释!
它直接在我的网站上找到0个结果,而不是做echo$行有什么想法吗?我希望它从我的数据库(phpmyadmin)中提取,数据库名称是events\u table。