【发布时间】:2013-01-28 06:02:12
【问题描述】:
我了解如何以我选择的语言创建线程,并且我了解互斥锁以及共享数据等的危险,但我确信操作系统如何管理线程以及每个线程的成本。我有一系列相关的问题,最清楚地表明我的理解极限的方法可能是通过这些问题。
生成线程的成本是多少?在设计软件时是否值得担心?创建线程的成本之一必须是它自己的堆栈指针和进程计数器,然后是在调度程序将所有工作寄存器移入和移出内核时复制所有工作寄存器的空间,但还有什么?
一个程序的可用堆栈量是在进程的线程之间平均分配还是先到先得?
我可以在(程序)启动时检查硬件的内核数量吗?如果我在 N 核的机器上运行,我应该将线程数保持在 N-1 吗?
【问题讨论】:
-
是的。可能是。有时。说真的,如果不了解更多关于什么操作系统、什么语言、什么虚拟机、什么线程库等的详细信息,这个问题是不可能回答的。但简短的回答是要小心过早的优化。除非您达到系统限制或分析器告诉您担心,否则我不会担心。
-
你是怎么到达N-1的?
-
一种理想化的世界方式,将一个核心留给“其他任务”,或者留给我所有被锁定的家庭男孩。
-
灰色 +1。有很多帖子提到了检测内核数量,摆弄亲和力等。我不记得有一个帖子说“我的应用程序性能显着提高了”。
标签: multithreading operating-system resources