Threads and CPU Affinity

你离开我真会死。 提交于 2020-01-13 20:28:30

问题


Lets say there are two processors on a machine. Thread A is running on P1 and Thread B is running on P2.

Thread A calls Sleep(10000);

Is it possible that when Thread A starts executing again, it runs on P2?

If yes, who decides this transition? If no, why not?

Does Processor store some data that which all threads it's running or OS binds each thread to Processor for its full lifetime ?


回答1:


It is possible. This would be determined by the operating system process scheduler and may also be dependent on the application that is running. No information about previously running threads is kept by the processor, aside from whatever is in the cache.




回答2:


This is dependent on many things, it behaves differently depending on the particular operating system. See also: Processor Affinity and Scheduling Algorithms. Under Windows you can pin a particular process to a processor core via the task manager.




回答3:


Yes, it is possible. Though ultimately a thread inherits its CPU (or CPU core) from the process (executable.) In operating systems, which CPU or CPU core a process runs on for its current quanta (time slice) is decided by the Scheduler:

http://en.wikipedia.org/wiki/Scheduling_(computing)

-Oisin




回答4:


The OS decides which processor to run the thread on, and it may easily change during the lifetime of that thread, especially if there is a context switch (caused by the sleep). It's completely possible if the system is loaded that both threads will be running on the same processor (or core), just at different times. Or if there isn't any load on the system, both threads may continue to run on separate processors.



来源:https://stackoverflow.com/questions/4847432/threads-and-cpu-affinity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!