古詩詞大全網 - 成語用法 - posix多線程是用戶級還是內核級

posix多線程是用戶級還是內核級

1.內核級線程:

(1)線程的創建、撤銷和切換等,都需要內核直接實現,即內核了解每壹個作為可調度實體的線程。

(2)這些線程可以在全系統內進行資源的競爭。

(3)內核空間內為每壹個內核支持線程設置了壹個線程控制塊(TCB),內核根據該控制塊,感知線程的存在,並進行控制。

在壹定程度上類似於進程,只是創建、調度的開銷要比進程小。有的統計是1:10

2.用戶級線程:

(1)用戶級線程僅存在於用戶空間。——>對比內核(3)

(2)內核並不能看到用戶線程。——>重要的區別

(3)內核資源的分配仍然是按照進程進行分配的;各個用戶線程只能在進程內進行資源競爭。

posix線程調度是壹個混合模型,很靈活,足以在標準的特定實現中支持用戶級和內核級的線程。模型中包括兩級調度--線程及和內核實體級。線程級與用戶級線程類似,內核實體由內核調度。由線程庫來決定它需要多少內核實體,以及他們是如何映射的。

POSIX 引入了壹個線程調度競爭範圍(thread-scheduling contention scope)的概念,這個. 概念賦予了程序員壹些控制權,使它們可以控制怎樣將內核實體映射為線程。線程的contentionscope屬性可是PTHREAD_SCOPE_PROCESS,也可以是PTHREAD_SCOPE_SYSTEM。帶有PTHREAD_SCOPE_PROCESS屬性的線程與它所在的進程中的其他線程競爭處理器資源。帶有PTHREAD_SCOPE_SYSTEM屬性的線程很像內核級線程,他們在全系統的範圍內競爭處理器資源。POSIX的壹種映射方式將PTHREAD_SCOPE_SYSTEM線程和內核實體之間綁定起來。

內核級線程創建時先設置線程屬性PTHREAD_SCOPE_SYSTEM,代碼如下,:

pthread_attr_t attr;

pthread_attr_init(&attr);

pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); //設置內核級的線程,以獲取較高的響應速度

//創建線程

ret = pthread_create(&iAcceptThreadId, &attr, AcceptThread, NULL);