提供一个物理CPU进行处理。任意数目的Goroutine可以阻塞在系统调 用上,但默认情况下,在任意时
刻,只有一个Goroutine可以被调度执行。我们未来可能会将其设计的更加智能,但是目前,你必须通过
设置 GOMAXPROCS 环境变量或者导入 runtime 包并调用 runtime.GOMAXPROCS(NCPU) , 来告诉Go
的运行时系统最大并行执行的Goroutine数目。你可以通过 runtime.NumCPU() 获得当前运行系统的逻辑
核数,作为一个有用的参考。需要重申:上述方法可能会随我们对实现的完善而最终被淘汰。
注意不要把“并发”和“并行”这两个概念搞混:“并发”是指用一些彼此独立的执行模块构建程序;
而“并行”则是指通过将计算任务在多个处理器上同时执行以 提高效率。尽管对于一些问题,我们可以利
用“并发”特性方便的构建一些并行的程序部件,但是Go终究是一门“并发”语言而非“并行”语言,并
非所有的并行 编程模式都适用于Go语言模型。要进一步区分两者的概念,请参考这篇博客的相关讨论。
一个“Leaky Buffer”的示例
有疑问加站长微信联系(非本文作者)