我了解如何以我选择的语言创建线程,并且了解互斥锁以及共享数据的危险等,但我确定 O/S 如何管理线程以及每个线程的成本。我有一系列相关的问题,最清楚地表明我的理解极限的方法可能是通过这些问题。
产生线程的成本是多少?在设计软件时是否值得担心?创建线程的成本之一必须是它自己的堆栈指针和进程计数器,然后是在调度程序将其移入和移出内核时将所有工作寄存器复制到的空间,但还有什么?
一个程序的可用堆栈量是在进程的线程之间平均分配还是先到先得?
我可以以某种方式在(程序的)启动时检查硬件的内核数量吗?如果我在具有 N 核的机器上运行,我应该将线程数保持在 N-1 吗?