2017-09-05 17 views
0

我想了解多線程的概念。多線程的支持來自:OS,CPU的多線程編程和支持?

1)從操作系統? (OR)
2)語言本身? (如果我是正確的,就像Java一樣)

CPU的作用是什麼,多線程能力是否也是由於CPU(不考慮多核處理器)?

有沒有OS或CPU不支持多線程的情況,但仍然可能與語言本身?

誰能幫我明白這一點?

+1

您的問題非常廣泛,難以回答。你是在問真正的世界還是理論上可能存在的東西? – Oleg

+1

Java進程在JRE下作爲OS進程運行,並且在其內部可以有多個線程。由於Java獨立於平臺,所以JRE實現的確切實現方式也各不相同。 例如,有一些新的非阻塞算法可以利用現代硬件並提高性能。 – amitmah

+0

我想了解更高層次的操作系統,CPU和語言本身對於多線程編程的作用;當然不在深入層面。 – CuriousMind

回答

1

線程是一系列指令,可以通過調度程序獨立於其他此類序列進行管理。

通常,調度程序是操作系統的一部分(例如,Linux's Completely Fair Scheduler)。

在某些方法(例如,green threads,stackless Python)中,調度程序是語言或運行時環境的一部分。

在現代計算環境中,線程數量通常超過CPU內核數量。當線程輪流運行在可用硬件上時,通常通過時間分片處理。調度員的工作就是管理它。

1

Understanding java's native threads and the jvm有一些信息。

基本上,多線程支持來自Java和Java中的操作系統和Java。這不會發生,例如,Python(標準的CPython只是Linux的線程封裝)。

https://superuser.com/questions/740611/what-is-the-difference-between-multithreading-and-hyperthreading詳細介紹了CPU爲了多線程所做的工作。

理論上,是的,一種語言可以是線程的實現者。根據你如何看待它,C不依賴於操作系統,它是它自己的線程(主要是因爲操作系統是用C編寫的)。上面的鏈接也說這個。

執行其自身線程化的語言可能不如OS級別線程那樣高效,因此OS線程是首選並且通常存在。

+0

'C不指望OS' - 例如,如果'C'用於實現固件或操作系統,那麼這就是事實。在這種情況下,它可能依賴於Assembly與(微)處理器交互並實現線程的概念(通常是在內核中實現的調度器)。在其他情況下,用C _mostmost_寫成的應用程序取決於操作系統使用多線程支持 - 例如,運行在Windows/Linux/maOS上的應用程序。 – jweyrich