golang
只是有一个方法runtime.GOMAXPROCS(1)
设置应用程序运行一个goroutine
在同一时间,但我想让应用程序只运行在特定的CPU?在特定的CPU上运行,而不是一个goroutine?
回答
要启动去你的二进制文件,说example.exe
使得它只能运行在CPU 0在Windows上,你可以使用start
命令与“亲和”参数:
start /affinity 1 example.exe
我不知道到底有什么你试图实现但参考this document describing GOMAXPROCS - Go运行时可能会更有效地做同样的事情。
下GC编译器(6克或8克),你必须设置GOMAXPROCS为比默认值大1到允许运行时支持使用多个操作系统线程,这是所有goroutines共享相同的线程,除非GOMAXPROCS设置为大于1的值。
当GOMAXPROCS大于1时,它们运行在具有多个线程的线程池中。使用gccgo编译器GOMAXPROCS实际上等于正在运行的goroutines的数量。假设n
是机器上的处理器或内核的数量。如果您设置环境变量GOMAXPROCS >= n
,或者致电runtime.GOMAXPROCS(n)
,则在n个处理器中将会议室分开(分配) 。
然而,更多的处理器并不一定意味着性能的线性改进,主要是因为需要更多的通信:消息传递开销增加。拇指的经验法则似乎是n个内核设置GOMAXPROCS到n-1得到最好的性能,同时也应遵循以下几点:
number of goroutines > 1 + GOMAXPROCS > 1
因此,如果只有一个够程执行在某个时间点,不要设置GOMAXPROCS!
如果您希望将goroutine锁定到特定的操作系统线程,则可以使用runtime.LockOSThread来完成此操作。
LockOSThread将调用的goroutine连接到其当前正在运行的 系统线程。在调用goroutine退出或调用UnlockOSThread之前,它将始终在该线程中执行,并且没有其他 goroutine可以执行。
我认为它根本不回答OP的问题。另外,OS线程!= CPU核心,我相信这是OP要求的。 – syntagma
- 1. js不是在Chrome上运行,而是在Firefox上运行
- 2. 如何在单个CPU的多个CPU核心上设置关联,而不是在多个CPU上?
- 3. MSBUILD是否在ARM-CPU上运行?
- 4. 如何使UITextView在特定的行而不是最后一行向上滚动?
- 5. jQuery - 制作.one运行在类的任何一个元素上,而不是每个元素上运行一次?
- 6. Python,在多个CPU上运行循环
- 7. 我们可以只在一组特定的行上添加一个触发器,而不是整个表上?
- 8. 如何使用特定的jdk(而不是JDK_HOME)运行eclipse
- 9. 如何强制两个进程在同一个CPU上运行?
- 10. C#:在GPU上执行操作,而不是CPU(计算Pi)
- 11. 确定Renderscript是否在CPU/GPU和线程数上运行
- 12. 在气流主节点上运行一个特定的任务
- 13. 运行在CPU
- 14. 在运行时找出特定线程的CPU内核
- 15. 在一个ASP.NET 4.0盒子上导致“操作可能会使运行时不稳定”而不是另一个
- 16. SQL 2005上运行我的一个单CPU上查询,因此是慢
- 17. 在特定页面而不是整个网站上应用https
- 18. 一次运行一个线程(而不是并行)
- 19. 阻止一个特定的资源,而不是整个网站
- 20. 是否可以使用CPU上的单个核心运行Tensorflow?
- 21. Cronjob每小时运行一次,但不是在特定时间运行
- 22. 命令是否可以在同一主机上的特定端口上运行?
- 23. 当下一个goroutine被执行时?
- 24. 在一行中定义两个变量,而不是两行
- 25. PHP标题(“位置:...”)在一台计算机上运行,而不是在另一台计算机上运行
- 26. 每20秒运行一次,而不是指定的延迟运行
- 27. 如何在给定的负载下运行CPU(%CPU利用率)?
- 28. Tensorflow仅在CPU上运行CUDA版本
- 29. 力HTTP而不是仅仅针对一个特定的文件
- 30. RVM切换到@global宝石,而不是特定的一个
start/affinity 1 gobinary.exe –
设置处理器亲和性是操作系统特定的,最好在流程本身之外完成。像Linux上的'taskset'这样的命令行工具通常用于执行此操作。 – JimB