您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“l(fā)inux中線程是什么意思”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“l(fā)inux中線程是什么意思”這篇文章吧。
在linux中,線程(thread)指的是程序內(nèi)部的一個執(zhí)行路線,即一個進程內(nèi)部的控制序列,一切進程至少都有一個執(zhí)行線程。線程是程序執(zhí)行的最小單位,線程共享進程數(shù)據(jù),但也有自己的一部分數(shù)據(jù)。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
什么是線程?
在一個程序里的一個執(zhí)行路線就叫做線程(thread)。更準確的定義是:線程是“一個進程內(nèi)部的控制序列”。
一切進程至少都有一個執(zhí)行線程。
進程與線程
進程是資源分配與競爭的基本單位
線程是程序執(zhí)行的最小單位
線程共享進程數(shù)據(jù),但也有自己的一部分數(shù)據(jù)
線程ID
一組寄存器:IP,PSW,堆棧指針
棧
errno
信號狀態(tài)
優(yōu)先級
fork和創(chuàng)建新線程的區(qū)別
當一個進程執(zhí)行一個fork調(diào)用的時候,會創(chuàng)建出進程的一個新拷貝,新進程將擁有它自己的變量和它自己的PID。這個新進程的運行時間是獨立的,它在執(zhí)行時幾乎完全獨立于創(chuàng)建它的進程。
在進程里面創(chuàng)建一個新線程的時候,新的執(zhí)行進程會擁有自己的堆棧(因此也就有自己的局部變量),但要與他的創(chuàng)建者共享全局變量、文件描述符、信號處理器和當前工作目錄狀態(tài)。
線程的優(yōu)點
創(chuàng)建一個新線程的代價要比創(chuàng)建一個新進程小得多
與進程之間的切換相比,線程之間的切換需要操作系統(tǒng)做的工作少得多
線程占用的資源要比進程少得多
能充分利用多處理器的可并行數(shù)量
在等待慢速I/O操作結束的同時,程序可執(zhí)行其他的計算任務
計算密集型應用,為了能在多處理器系統(tǒng)上運行,將計算分解到多個線程中實現(xiàn)
I/O密集型應用,為了提高系統(tǒng),將I/O操作重疊。線程可以同時等待不同的I/O操作
線程的缺點
性能損失
一個很少被外部事件阻塞的計算密集型線程往往無法與其他線程共享同一個處理器。如果計算密集型線程的數(shù)量比可用的處理器多,那么可能會有較大的性能損失,這里的性能損失指的是增加了額外的同步和調(diào)度開銷,而可用的資源不變。
健壯性降低
編寫多線程需要更全面更深入的考慮,在一個多線程程序里,因時間分配上的細微偏差或者因共享了不該共享的變量而造成不良的可能性是很大的,換句話說線程之間是缺乏保護的。
缺乏訪問控制
進程是訪問控制的基本粒度,在一個線程中調(diào)用某些OS函數(shù)會對整個進程造成影響。
編程難度提高
編寫與調(diào)試一個多線程比單線程程序困難得多
線程調(diào)度競爭范圍
操作系統(tǒng)提供了各個模型,用來調(diào)度應用程序創(chuàng)建的線程。這些模型時間的主要不同是:在競爭系統(tǒng)資源(特別是CPU時間)時,線程調(diào)度競爭范圍(thread-scheduling contention scope)不一樣
進程競爭范圍(Process contention scope):各個線程在同一個進程競爭“被調(diào)度的CPU時間”(但不直接和其他進程中的線程競爭)。
系統(tǒng)競爭范圍(System contention scope):線程直接和”系統(tǒng)范圍“內(nèi)的其他線程競爭。
以上是“l(fā)inux中線程是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。