內核線程表示內核負責調度的線程。這意味着,除其他外,內核能夠同時在不同的cpu /內核上安排每個線程。
如何使用它們改變了很多的編程語言和線程API,但作爲一個簡單的例子,
void task_a();
void task_b();
int main() {
new_thread(task_a);
new_thread(task_b);
// possibly do something else in the main thread
// wait for the threads to complete their work
}
在我所熟悉的每一個實現,內核可在任何時間暫停。 (「先發制人」)
用戶線程或「用戶調度線程」使程序本身負責在它們之間進行切換。有很多方法可以做到這一點,相應地,它們有各種各樣的名稱。
一方面你有「綠色線索」;基本上和內核線程做同樣的事情。因此,您可以通過真正的線程保留編程的所有複雜性。
在另一端,你有「光纖」,這是需要在任何其他光纖運行之前屈服。這意味着
- 纖維按順序運行。沒有平行的性能收益。
- 纖維之間的相互作用是非常明確的。其他代碼只在您產生的確切點上運行。其他代碼在您處理它們時不會改變變量。
- 大多數低級複雜程序員在多線程中苦苦掙扎,如緩存一致性(查看本網站上的MT問題,大多數人都沒有這樣做)並不是一個因素。
正如我能想到的纖維最簡單的例子:
while(tasks_not_done) {
do_part_of_a();
do_part_of_b();
}
其中每個做了一些工作,那麼當這部分完成返回。請注意,這些是在相同的「硬件線程」中順序完成的,這意味着您不會從並行性中獲得性能提升。另一方面,它們之間的相互作用是非常明確的,所以你沒有競爭條件。每個功能的實際工作可能會有所不同。它們也可以是來自某個vector/array的「用戶線程對象」。
標題'操作系統'並不真正符合你的要求。 – 2011-02-13 16:03:27