2017-06-14 58 views
4

我看過一個進程和線程在Linux下同樣的事情,例如在此question它說:Linux中的進程和線程是如何相同的?

有一個線程和 Linux的一個過程之間絕對沒有區別。

但我不明白一個進程和一個線程怎麼可能意味着同樣的事情。我的意思是一個線程是由CPU執行的,一個進程只是線程的「機箱」,允許線程共享內存。此圖像顯示一個過程,它的線程之間的關係:

enter image description here

所以顯然是一個過程,一個線程並不意味着同樣的事情!

+1

'有一個線程和 Linux.'過程之間絕對沒有區別。 - 從 [調度]( https://en.wikipedia.org/wiki/Scheduling_(computing)#Process_scheduler) point of看起來,這可能是真的 –

+0

可能重複[線程vs Linux中的進程](https://stackoverflow.com/questions/807506/threads-vs-processes-in-linux) –

+1

不同觀點:你正在考慮流程和線程,就其對開發人員而言意味着什麼。你引用的問題是關於實現細節的問題。但是,正如PSkocik在他的回答中所說的那樣,現在這個問題已經過時了:Linux的實現已經發生了變化。 –

回答

3

Linux沒有用來爲(POSIX)線程提供特殊支持,它只是將它們視爲與其他資源(文件描述符,信號操作......)共享其地址空間的進程「進程」。

這個實現雖然很優雅,但由於POSIX難以完成某些線程所需的操作,所以Linux最終獲得了對線程的特殊支持,而且現在的前提已不再成立。

然而,進程和線程仍然都保持表示爲內核中的任務(但現在的內核與這些工作(對於分組這些任務到線程組,以及支持和API(tgkilltkillexit_group,.. 。))

可以在Google的LinuxThreads和NPTL線程來了解更多關於該主題