回答
大多数操作系统都改变一个进程的CPU亲和力,从而将其限制在一台物理或虚拟核设施。但多线程是一种程序架构,而不是CPU设备。
多线程和多任务处理不是CPU中的特殊指令或模式。它们只是编写操作系统的人使用中断的奇特方式。有一个硬件定时器,基本上是一个计数器增加一个时钟信号,当它溢出时触发一个中断。确切的中断是平台特定的。在过去的这段时间里,这个定时器实际上是一个单独的主板上的芯片/电路,只需连接到CPU的一个中断引脚。现代CPU具有内置此计时器的功能。因此,要关闭多线程和多任务操作,操作系统可以简单地禁用中断信号。
另外,由于操作系统的工作是实际调度进程/线程,操作系统可以简单地决定忽略所有线程而不运行它们。
超线程是另一回事。它允许操作系统看到它可以执行代码的第二个虚拟CPU。从来没有直接处理这件事,所以我不知道如何关闭它(或者即使有可能)。
我想你想问的是,“有没有办法阻止操作系统利用超线程和/或多核?”
答案是肯定的。这不受单条指令的支配,事实上它不像你可以写一个设备驱动程序,它会自动禁用所有的硬件。这大部分取决于内核在启动时如何配置中断控制器。
当机器首次启动时,会有一个用于自举的指定处理器。操作系统有责任相应地配置多处理器硬件。在PC平台上,这将涉及从引导固件提供的内存表中读取有关多处理器配置的信息。这些数据可能符合ACPI或Intel多处理器规范。内核然后使用该日期来相应地配置APIC硬件。
没有禁用超线程或其他内核的x86指令。但是,有BIOS设置可以关闭这些功能。因为它可以在BIOS中设置,所以需要重新启动,并且通常不受操作系统控制。 Windows引导选项限制了活动核心的数量,但HyperThreading只能通过BIOS打开/关闭。目前英特尔的超线程实现不允许动态开启和关闭(并且在近期不会轻易实现)。
我在您的问题中假设'多线程'为'hardware multithreading',它在技术上与HyperThreading相同。但是,如果您真的打算进行软件级多线程(即多任务),那么这是完全不同的问题。现代操作系统(几乎)不可能,因为它们默认支持多任务处理。而且,这个问题实际上没有意义。如果你想运行MS-DOS(作为x86的真实模式,可以完成单个任务),这可能是有意义的。
p.s.请注意'多线程'可以是硬件或软件。我同意所有其他人的答案,如处理器/线程亲和力。
- 1. Android - 线程运行时禁用按钮
- 2. 在mingw中执行时禁用线程
- 3. java线程在运行多线程时不会中断
- 4. 运行多个线程同时
- 5. 同时运行多个线程
- 6. python多线程长线程运行
- 7. 运行多个UI线程
- 8. JavaFX多次运行线程
- 9. 运行的线程太多
- 10. 在运行时调用一个多线程的DLL
- 11. pyqt多线程 - 无法同时运行单独的线程?
- 12. 使用多线程时程序运行速度较慢
- 13. Java,多线程应用程序,运行时的主窗口
- 14. 使用多线程运行Odd偶程序时得到异常
- 15. 多线程程序在循环加时间运行
- 16. 在Java中运行多个线程
- 17. 在XPages中运行多个线程
- 18. 在Java中运行多线程
- 19. C#在多线程上运行IronPython
- 20. 让Eigen运行在多线程中
- 21. 在java中运行多少个线程?
- 22. 运行时线程创建
- 23. C++线程运行时间
- 24. 同时运行Python线程
- 25. 在运行时启用和禁用gprof?
- 26. 运行时禁用datagridviewcombobox
- 27. 在特定时间运行java线程
- 28. Python线程在创建时运行,而不是在运行()时调用
- 29. 在运行时禁用gcov覆盖
- 30. 在运行时禁用JComboBox项目
操作系统可能拒绝运行内核线程,但有可用库提供进程内线程;操作系统阻止这些人工作的唯一方法是根本不运行该进程。 – 2010-01-19 18:52:54