进程和线程

进程

每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)

线程

同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是独立运行和独立调度的基本单位)

进程和线程区别

1进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
2进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响。
3线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮。
4在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
5线程执行开销小,但不利于资源的管理和保护,而进程正相反
6线程适合于在SMP(多核处理机)机器上运行,而进程则可以跨机器迁移。

通信

一、进程间通信方式

(匿名)管道(pipe):数据只能单向流动,而且只能在具有亲缘关系的进程间使用(通常指父子进程关系)。
有名管道(namedpipe):半双工通信方式,允许无亲缘关系进程间的通信。数据可以双向流动。
信号量(semophore):是一个计数器,用来控制多个进程对共享资源的访问。常作为一种有锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源,因此主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列(messagequeue):是由消息的链表,存放在内核中并由消息队列标识符标识。克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号(sinal):比较复杂的通信方式,用于通知接收进程某个时间已经发生。
套接字(socket):进程间通信机制,可用于不同进程之间的通信。

二、进程间通信方式

锁机制:互斥锁,条件变量、读写锁。
互斥锁提供了以排他方式防止数据结构被并发修改的方法。
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值