各位看官們,大家好,上一回中咱們說的是生產者與消費者問題的例子,這一回咱們說的例子是:線程概述。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們今天我們章回中的主角是線程。什麼是線程呢?大家還記得我們在前面章回中介紹過進程的概念吧:進程就是在系統中運行著的程序。而線程是進程中的一個單元,通常叫它輕量級的進程。
線程由進程來創建,它只有自己的棧,其它資源都是和創建它的進程一起共用。接下來我們通過具體的例子來看看線程的“廬山真面目”。
我們查看一下系統的進程。在終端中執行命令:ps x得到以下結果:
PID TTY STAT TIME COMMAND
1501 ? Ssl 0:00 cinnamon-session --session cinnamon
... //省略其它進程的信息
3375 ? Sl 0:08 gnome-terminal
3383 pts/1 Ss 0:00 bash
3740 ? Sl 0:02 /usr/lib/firefox/firefox //這是firefox浏覽器的進程
3823 pts/1 R+ 0:00 ps x
大家從上面的運行結果中可以看到系統中運行著firefox進程,在終端中執行命令:ps xH得到以下結果:
PID TTY STAT TIME COMMAND
1501 ? Ssl 0:00 cinnamon-session --session cinnamon
1501 ? Ssl 0:00 cinnamon-session --session cinnamon
1501 ? Ssl 0:00 cinnamon-session --session cinnamon
1501 ? Ssl 0:00 cinnamon-session --session cinnamon
... //省略其它進程的信息
3375 ? Sl 0:08 gnome-terminal
3375 ? Sl 0:00 gnome-terminal
3375 ? Sl 0:00 gnome-terminal
3375 ? Sl 0:00 gnome-terminal
3383 pts/1 Ss 0:00 bash
3740 ? Sl 0:02 /usr/lib/firefox/firefox //下面都是firefox的線程
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? SNl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? SNl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3740 ? Sl 0:00 /usr/lib/firefox/firefox
3833 pts/1 R+ 0:00 ps xH
從上面的結果中大家可以看到進程firefox擁有很多線程。有看官說,你怎麼知道呢?其實從PID這一列就能看到,它們都擁有相同的PID。這也再次說明線程和創建它的進程共用資源。嚴格點說,線程是沒有像進程PID一樣的標記,上面結果顯示的是進程的PID。我們可以使用ps md 3740命令查看PID為3740進程的線程,結果如下:
ps mp 3740 //查看PID為3740進程的線程
PID TTY STAT TIME COMMAND
3740 ? - 0:02 /usr/lib/firefox/firefox
- - Sl 0:01 - //下面顯示的都是firefox的線程
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - SNl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - SNl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
- - Sl 0:00 -
從上面的運行結果中可以看到PID為3740進程的線程是沒有PID的。
各位看官,關於線程概述的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。