我想试验多核处理器上的线程,例如创建一个程序,该程序使用由两个不同处理器内核执行的两个不同线程。
但是,我不清楚线程在哪个级别分配给不同的内核。我可以想象以下情形(取决于操作系统和编程语言的实现):
- 线程分配由操作系统管理。线程是使用OS系统调用创建的,如果进程恰巧在多核处理器上运行,则OS会自动尝试在不同的内核上分配/调度不同的线程。
- 线程分配由编程语言实现管理。将线程分配给不同的内核需要特殊的系统调用,但是当我使用该语言的标准线程实现时,编程语言标准线程库会自动处理该问题。
- 线程分配必须明确编程。在我的程序中,我必须编写明确的代码来检测有多少个内核可用,并使用例如库函数将不同的线程分配给不同的内核。
为了使问题更具体,假设我已经在Windows或Linux上用Java或C ++编写了多线程应用程序。在多核处理器上运行时,我的应用程序会神奇地看到并使用多个内核吗(因为所有内容都由操作系统或标准线程库管理),还是我必须修改代码以了解多个内核?