进程:进程是一个程序的一次执行过程,它和程序有本质上的区别,程序是静态的,是存储在磁盘上的一些指令的集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度、消亡的整个过程,,进程是程序执行和资源管理的最小单位。
Linux中用的较多的进程间通信方式有:管道、信号、消息队列、共享内存、信号量。
一、所谓管道,是只能够连接一个写进程和一个读进程、并允许他们以生产者—消费者方式进行通信的一个共享文件,又称PIPE文件。
管道包括有名管道和无名管道,无名管道用于具有亲缘关系进程间的通信(如斧子进程、兄弟进程等)有名管道除此之外还允许无亲缘关系进程间的通信。
二、消息队列是一个消息的链表,可以把消息看做记录。对消息队列有写权限的进程可以按照一定的规则向消息队添加消息,对消息队列有读权限的进程可以从链表中读消息。
消息队列与管道相比具有更大的灵活性。1、它提供有格式的字节流,有利于减少开发人员的工作量。2、消息具有类型,在实际中可以作为优先级使用。
三、信号量是用来解决进程间的同步和互斥问题的一种进程间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的原子操作。
进程间互斥与同步关系存在的根源在于临界资源,临界资源是在同一个时刻只允许有限个进程可以访问或修改的资源,包括硬件资源和软件资源。
四、共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出一块内存区,这段内存可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一内存中的数据,大大提高了效率,多个进程共享一块内存。需要依靠互斥锁和信号量等同步机制。
线程:线程是一个进程的基本调度单位,线程是在共享内存空间中并发的多道执行路径,他们共享一个京城的资源,一个进程可以有多个线程,由于线程共享了进程的资源,和地址空间,因此任何线程对系统的操作都会给其他线程带来影响,因此需要线程同步。
由于线程共享进程的资源和地址空间,因此对这些资源进行操作时要考虑线程间资源访问的同步和互斥,Linux主要提供互斥锁和信号量两种线程同步机制。
信号量::操作系统中所用到的PV原子操作,广泛引用于进程或线程间的同步或互斥。
PV原子操作是对整数计数器信号量sem的操作,一次P操作使sem减1,一次V操作使sem加1。进程或线程根据信号量的值来判断是否对公共资源有访问权,当信号量sem的值大于等于0时,有访问权,当小于0时,该进程或线程将阻塞直到sem进程通信方式的值大于0。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论