各位看官们,大家好,上一回中咱们说的是生产者与消费者问题的例子,这一回咱们说的例子是:线程概述。闲话休提,言归正转。让我们一起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。这也再次说明线程和创建它的进程共用资源。我们可以使用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的。
各位看官,关于线程概述的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。