进程与线程
来源:互联网 发布:mac 音视频处理软件 编辑:程序博客网 时间:2024/06/04 20:08
首先,先弄明白何谓线程与进程:
1.先说说概念吧。
线程的上级,作业:用户在一次解决问题或事务处理中,系统所要做的所有工作的集合就叫做作业,它是由一系列有序的步骤构成的。当然,一个作业是可以会有很多个不同的进程的,它包括用户程序,所需要的数据集合控制命令等。
进程:程序在处理数据集的一次运行过程,它是操作系统资源分配的基本单位。
线程:是线程执行的一个实体,是被操作系统独立调度和执行的基本单位。
一个进程是可以有一个或多个线程的,最少得有一个线程。
换句话说:
作业是向计算机提交任务的任务实体。
进程是执行实体,是资源分配的基本单位。
线程是处理机调度的基本单位。
做个比喻:当用户向某公司发起委托时,某老大就会接下委托,然后具体将工作分配给不同的团队,再由个体团队分配给每个人具体的工作。
这里作业就可以形象的看作某老大,进程就可以看作不同的团队,而线程就可以看作团队中的每个成员个体。
2.进程有哪些特性呢?
动态性:进程是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
多个不同的进程可以包含相同的程序,一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
3.线程的特征
- 线程的执行状态包括运行、就绪和等待。
- 进程中的所有线程共享所属进程内的主存和其他资源。
- 拥有自己的线程控制块和执行栈,寄存器。
4.进程和线程有哪些区别呢?
- 子进程和父进程是有着不同的代码和数据空间的,而多线程则是共享的数据空间。
- 一个进程中可以包含多个线程,且他们可以利用线程所拥有的资源,而每个线程都是有自己的执行堆栈和程序计数器为其执行上下文的。
- 在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
- 由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。
- 多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。
5.进程五个状态模型
创建状态:一个进程正在被创建,还没被转到就绪状态之前的状态。
运行状态:当一个进程正在处理机上运行时。
就绪状态:一个进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行.
阻塞状态:一个进程正在等待某一事件而暂停运行时。如等待某资源,等待输入/输出完成。
结束状态:一个进程正在从系统中消失时的状态,这是因为进程结束或由于其他原因所导致。
关系附图如下:
6.进程间通信的方式有几种呢?
用于进程间通讯的四种不同技术: 共享内存,临界区,管道,消息。
具体内容如下:
- 消息传递(管道,FIFO,posix和system v消息队列)
- 同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯)
- 共享内存区(匿名共享内存区,有名Posix共享内存区,有名System V共享内存区)
过程调用(Solaris门,Sun RPC)
其中过程调用又包括如下方法:
(1)管道:管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
(2)命名管道:命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
(3)信号:信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction。
(4)消息队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
(6)内存映射:内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。
(7)信号量:主要作为进程间以及同一进程不同线程之间的同步手段。
(8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。
- 进程与线程线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 进程与线程
- 线程与进程
- 线程与进程
- 进程与线程
- 进程与线程
- 线程与进程
- 进程与线程
- 关于Linux的操作指令研究
- Yii 复选框方便管理员批量操作
- IDEA怎么打包可运行jar的一个有关问题
- 设计模式(1)————单例模式
- struts2概念及案例
- 进程与线程
- 多行文本溢出显示省略号
- 推荐系统入门
- 存储过程小记
- 指针
- 练习
- Python学习笔记-str和repr
- layout文件夹中activity_main.xml与fragment_main.xml文件的处理记录
- 如何使用Android系统自带的VPN服务框架