进程与线程有根本上的不同。
每个进程有其独立的数据空间,文件描述符以及进程的ID。
而线程共享一个数据空间,文件描述符以及进程ID。
一些重要概念:
1.共享数据空间
多个线程可以轻易地读取到这个共享的数据集。在读取上,一般不会出现问题,但是涉及到数据的修改时,就需要考虑一系列问题了。
2.共享的文件描述符
在fork原语被调用之后,文件描述符将被复制,从而子进程得到一套全新的文件描述符,子进程关闭某一从父进程继承的文件描述符之后,对父进程无任何影响(对于父进程该描述符仍是打开的)。而在多线程中,线程的文件描述符是共享的,一个线程关闭该文件,则该文件描述符对于进程中的所以线程都是关闭的。
3.fork,exec,exit,Signals
如果一个线程调用了exec,系统内核用一个新的程序代替了当前程序,于是所以正在运行的线程都会消失。
如果一个线程调用了fork,那么只有调用fork的线程在新的进程中运行。
如果一个线程调用了exit,那么整个进程都将结束。
线程与信号量之间则比较复杂,在此先不做讨论。
*参考自《Unix/Linux编程实践教程》