进程和线程的区别
来源:互联网 发布:男生衣服搭配软件 编辑:程序博客网 时间:2024/06/16 12:48
当我们的程序中的两个功能需要同时实现,或是都需要阻塞,我们
可能会想到求助于进程或线程,但它们的具体区别是什么或许一下还
说不出来。
进程是具有一定独立功能的程序,是系统进行资源分配和调度的一个独立单位.
线程是进程的一个实体,它是比进程更小的能独立运行的基本单位.线程自己基
本上不拥有系统资源,只拥有一点在运行中必不可少的资源
(如程序计数器,一组寄存器和栈),但是它可与同属一个进程
的其他的线程共享进程所拥有的全部资源.
进程和线程的区别;
1创建和结束
进程的创建 常用的是fork(); 还有exec();
结束时有wait(NULL)//NULL表示不关心子进程返回状态;
或pid_t waitpid(pid_t pid,int * status,int options);
例:
waitpid(pid, NULL,0 );pid为子进程进程号, status为子进程返回状态,不关心的话可以为NULL; options为0的话表示要等的子进程没结束的话就挂起,不挂起的话就用 WNOHANG;waitpid(-1,NULL,0) 相当于wait(NULL);
线程的创建 pthread_create(&tid[i], NULL, fun, &a[i]); 第一个参数为要线程号的地址;第二个参数为创建线程的类型,一般为NULl即默认;第三个参数为要调用函数的入口地址,可以是函数指针;第三个为该函数的参数;
线程的结束:pthread_join(tid[1], NULL); 第一个参数为要结束的线程号, 第二个参数为结束类型,和线程以什么方式退出有关,如不关心可以是NULL;
2所占内存资源的不同
进程有自己独立的地址空间,而线程则需要和同一进程中的其他线程共享一个地址空间,但线程却有自己独立
的栈,线程的栈是从进程的栈中切割出来的,当然它也能给子函数分配和保存栈帧;(两个不同线程调用同一子
函数时都会在自己的栈区为其创建栈帧,所以子函数可以同时被不同的线程调用);下边详细讲它们在所占内存资源上的不同
进程有自己独立的地址空间,也就是有自己的一套诸如text段,realdata段
data段、栈、堆等, 进程创建时会将父进程的地址空间复制一份,如父进程定义的全局
变量在子进程中也能有一个相同名称的,但这两个变量并不是同一个。
而对于线程,同一个进程中的多个线程共享同一个地址空间,也就是
进程的地址空间,当然线程也有自己独享的一些内存资源来保障它能相对
独立运行,比如栈。栈是个线程独有的,保存其运行状态和局部自动变量的。
栈在线程开始的时候初始化,每个线程的栈互相独立,因此,
栈是 thread safe的也就是线程安全。操作系统在切换线程的时候会自动的切换栈,
就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放
每个进程都有一个栈,在这个进程中每个函数被调用是分别从
这个栈中占用一段区域称为帧(即新建一个栈顶,再有一个指针指向它)
进程的地址空间分成代码段、静态数据段、堆和栈段。线程栈的位置和
大小是从它所属的进程的栈中切分出来的。线程栈为线程调用且尚未退出
的每个例程保存一个栈帧。栈帧包含临时变量、局部变量、返回地址以及
线程回到之前执行的例程所需要的任何附加信息。一旦例程退出,
该例程的栈帧会从栈中删除。
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 进程和线程的区别
- 线程和进程的区别
- 进程和线程的区别
- 线程和进程的区别
- 什么是网页原子设计模式(Atomic Design)
- httpd服务器的安装与配置
- linux下堆与栈的比较
- 小猴子下落 Java
- 动态分配malloc realloc free
- 进程和线程的区别
- C语言的格式化输入将回车输入的问题
- STC12C5A60S2 单片机资料
- 嵌入式中__main 和main 作用
- ARM 第一个汇编程序(跳转,循环,reset_handler,swi_handler 软件中断)
- 阅读ARm芯片手册 阅读方法
- arm 工作模式 寄存器组织
- friendarm 6410板子在windows的第一个程序 (下程序,在模拟dos终端编译汇编,C)
- ubuntu 9.10 在vmware上安装虚拟机步骤;