UNIX线程与进程
2015-12-21 10:34
288 查看
进程与线程有根本上的不同。
每个进程有其独立的数据空间,文件描述符以及进程的ID。
而线程共享一个数据空间,文件描述符以及进程ID。
一些重要概念:
1.共享数据空间
多个线程可以轻易地读取到这个共享的数据集。在读取上,一般不会出现问题,但是涉及到数据的修改时,就需要考虑一系列问题了。
2.共享的文件描述符
在fork原语被调用之后,文件描述符将被复制,从而子进程得到一套全新的文件描述符,子进程关闭某一从父进程继承的文件描述符之后,对父进程无任何影响(对于父进程该描述符仍是打开的)。而在多线程中,线程的文件描述符是共享的,一个线程关闭该文件,则该文件描述符对于进程中的所以线程都是关闭的。
3.fork,exec,exit,Signals
如果一个线程调用了exec,系统内核用一个新的程序代替了当前程序,于是所以正在运行的线程都会消失。
如果一个线程调用了fork,那么只有调用fork的线程在新的进程中运行。
如果一个线程调用了exit,那么整个进程都将结束。
线程与信号量之间则比较复杂,在此先不做讨论。
*参考自《Unix/Linux编程实践教程》
每个进程有其独立的数据空间,文件描述符以及进程的ID。
而线程共享一个数据空间,文件描述符以及进程ID。
一些重要概念:
1.共享数据空间
多个线程可以轻易地读取到这个共享的数据集。在读取上,一般不会出现问题,但是涉及到数据的修改时,就需要考虑一系列问题了。
2.共享的文件描述符
在fork原语被调用之后,文件描述符将被复制,从而子进程得到一套全新的文件描述符,子进程关闭某一从父进程继承的文件描述符之后,对父进程无任何影响(对于父进程该描述符仍是打开的)。而在多线程中,线程的文件描述符是共享的,一个线程关闭该文件,则该文件描述符对于进程中的所以线程都是关闭的。
3.fork,exec,exit,Signals
如果一个线程调用了exec,系统内核用一个新的程序代替了当前程序,于是所以正在运行的线程都会消失。
如果一个线程调用了fork,那么只有调用fork的线程在新的进程中运行。
如果一个线程调用了exit,那么整个进程都将结束。
线程与信号量之间则比较复杂,在此先不做讨论。
*参考自《Unix/Linux编程实践教程》
相关文章推荐
- kaldi parallelism
- 我们能用canvas做什么?
- Javascript图片轮播效果一秒换一个
- 多线程技术----最简单的demo开始之windows版
- 安卓打包签名之-export aborted because fatal lint errors were found
- Android Vibrator的使用
- 设计模式之组合模式
- 几种开源分词工具的比较
- INTEL_BIOS 编译—for-ATOM_E3800
- iOS 9.1如何隐藏和显示StatusBar
- 激活Maven profile的几种方式
- 酷毙的html标签编辑器
- 深入浅出Docker
- 找出n个数中出现了奇数次的两个数
- 实例变量那点事
- 突然发现网站跳转到Apache 2 Test Page powered by CentOS
- 全球域名商解析新增保有量16强:万网回归 获季军
- 欢迎使用CSDN-markdown编辑器
- 常用目录名
- arm-linux-gcc的安装和配置