所以我以爲我在某個地方讀過,在任何時候只有一個進程只能獲得一個處理器資源。但我也認爲我已經閱讀過某個地方,每個線程在任何時候都可以獲得一個處理器資源。後一種說法將與第一種說法相矛盾,因爲過程可能存在於更多的線索之中。一個進程的不同線程可以使用更多的處理器嗎?
那麼一個進程的線程可以與該進程的其他線程並行運行嗎? (並行我的意思是同時運行多個處理器或內核)
所以我以爲我在某個地方讀過,在任何時候只有一個進程只能獲得一個處理器資源。但我也認爲我已經閱讀過某個地方,每個線程在任何時候都可以獲得一個處理器資源。後一種說法將與第一種說法相矛盾,因爲過程可能存在於更多的線索之中。一個進程的不同線程可以使用更多的處理器嗎?
那麼一個進程的線程可以與該進程的其他線程並行運行嗎? (並行我的意思是同時運行多個處理器或內核)
您的問題的答案取決於系統如何實現線程。操作系統查看線程和進程之間的關係有兩種主要方式。
一個進程有一個地址空間,它是計劃執行的基本單元。
進程有一個地址空間,線程是計劃執行的基本單元。一個進程是一個地址空間和一個或多個可調度線程。
#1(在許多操作系統上使用)線程在庫中實現。該進程負責安排自己的線程。在該線程模型中,來自同一進程的所有線程都在同一個處理器上交錯運行(儘管它們可能在一些系統中將處理器連接在一起)。該進程只能安排自己的線程在運行進程的處理器上運行。
#2(更現代的方法)進程的線程可以在多個處理器上同時執行。
是的,他們可以!
這是多線程程序如何在多核系統上實現並行性。
想象一下,如果情況並非如此,那麼在多核處理器上就沒有多線程程序。
現在您可能會問如何在多核上實現調度? https://pdos.csail.mit.edu/papers/o2:hotos12.pdf