您的位置:首页 > 其它

线程与进程的关系

2015-08-20 15:15 260 查看

概述

进程是资源分配的基本单位,进程由线程组成。

线程是系统执行调度的基本单位,线程隶属于进程。

为何引入线程

1、进程在同一时间只能干一件事,比如我们在上课的时候,往往要耳朵听课,手记笔记,脑子思考,如果套用进程的机制,那么我们听课的时候也不能记录笔记,更不能思考。

2、当进程某个操作阻塞时,整个进程就会挂起,也就是说当老师讲课时需要思考的时候,我们也还只能听课,不能思考也不能记录笔记

线程与进程的区别

1、进程是资源分配的基本单位,线程是系统执行调度的基本单位

2、每个进程都有独立的内存地址空间,互不影响,每个线程都共享同一进程的内存空间

3、当一个进程崩溃时,由于地址空间是独立的,所以不会影响其他进程,当一条线程出现问题时,整个进程就会有问题

4、线程可以看做是进程内部的执行路径,当路径只有一条的时候,就称为单线程,多条则为多线程

5、创建线程要比创建进程快,在创建和回收进程的时候,系统都要为之分配和回收资源,导致系统的开销明显大于线程的开销

进程间通信

管道及有名管道:

管道用于具有亲缘关系的父子进程之间的通信;有名管道除了具有管道的功能,还允许无缘进程之间的通信

信号:

在软件层次上对中断机制的一种模拟,用于通知进程有某件事要发生

消息队列:

消息的链接表,具有写权限的进程可以向消息队列中写入消息,具有读权限的进程可以从消息队列中读取消息。

共享内存:

多个进程访问同一块内存区域,不同进程之间可以看到对方对数据的更新

Socket:

网络中不同机器之间的网络通信

线程间通信

信号量(允许多个线程在同一时间访问统一资源):

我们可以看个例子:假设车是线程,停车场是内存空间。有一个停车场内只能容纳5个车,所以每进去一辆车就在门卫处拿一个牌号,因为只有5个牌号,所以当停车场停够5辆车的时候,其余车就不能进入,只能在外面排队等待。只有当停车场内一个车出来的时候,把车牌归还给门卫,此时在外面排队的进去一个车。这样做保证了多个线程之间不冲突。

互斥:

把停车场的例子换成停车场内只能容纳一个车。我停时,你就不能停。

临界区:

任何时刻只允许一个线程对共享资源进行操作,其他线程要访问共享资源都会被挂起,当临界区中的线程离开时,其他线程可以抢占

线程间通信的目的主要是用于线程同步,所以没有像进程中交换数据的通信机制

多线程同步和互斥的区别

同步就是线程之间的一种制约关系,一个线程的执行依赖于另一个线程的消息,一个线程只有得到另一个线程的消息时可以被唤醒,否则应该等待。

互斥是当一个线程访问共享资源的时候,任何时刻只允许一个线程去使用,其他要使用该资源的线程必须等待,只要占用该资源的线程释放该资源。

因此互斥可以看做一种特殊的同步。

举个例子:

一个全局变量,只要当主线程修改了这个变量后,下一个才可以访问,此时就需要同步两个线程;

一个线程在访问全局变量的时候另一个线程不能访问这个变量,这就是互斥。

线程安全

多线程的程序是可预期的,和单线程运行结果一样,那么就说明是安全的

参考

进程与线程的区别?

进程与线程的一个简单解释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: