进程之间和线程之间的通信
管道 :管道是一种半 双工的通信方式 ,各个进程 互斥访问 管道, 数据也只能单向流动 ,但是可以通过两个管道来实现全双工通信。 共享存储 :多个进程都可以互斥访问的存储空间,可以基于数据结构(比如数组)或者基于存储区。 消息队列 :传递结构化的消息。各个进程都有一个相当与信箱一样的消息缓冲队列。进程A和进程B通信就可以发消息给进程A的消息缓冲队列。 信号量 :主要用来控制多个进程对共享资源的访问。主要作为进程间以及同一进程内不同线程之间的同步手段。信号量有整形和记录型信号量。整形信号量不满足“让权等待”原则,而记录型信号量有block和weakup原语,可以实现让权等待。 套接字 : 与其他通信机制不同的是,可用于 不同机器间的进程通信 。 线程之间的通信不像进程那么复杂,因为同一个进程的线程资源都基本上是一样的,它们的通信目的主要是用于线程同步和互斥访问某个资源,所以线程没有像进程通信中的用于数据交换的通信机制。
线程间通信有哪些方式
线程间通信方式有:1、volatilevolatile有两大特性,一是可见性,二是有序性,禁止指令重排序,其中可见性就是可以让线程之间进行通信。volatile语义保证线程可见性有两个原则保证:(1)所有volatile修饰的变量一旦被某个线程更改,必须立即刷新到主内存。(2)所有volatile修饰的变量在使用之前必须重新读取主内存的值。2、等待/通知机制等待通知机制是基于wait和notify方法来实现的,在一个线程内调用该线程锁对象的wait方法,线程将进入等待队列进行等待直到被通知或者被唤醒。3、join方式join其实合理理解成是线程合并,当在一个线程调用另一个线程的join方法时,当前线程阻塞等待被调用join方法的线程执行完毕才能继续执行,所以join的好处能够保证线程的执行顺序。但是如果调用线程的join方法其实已经失去了并行的意义,虽然存在多个线程,但是本质上还是串行的,最后join的实现其实是基于等待通知机制的。4、threadLocalthreadLocal方式的线程通信,不像以上三种方式是多个线程之间的通信,它更像是一个线程内部的通信,将当前线程和一个map绑定,在当前线程内可以任意存取数据,减省了方法调用间参数的传递。线程特点:1、轻型实体线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。2、独立调度和分派的基本单位在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。3、可并发执行在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了处理机与外围设备并行工作的能力。4、共享进程资源在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址。此外,还可以访问进程所拥有的已打开文件、定时器、信号量机构等。由于同一个进程内的线程共享内存和文件,所以线程之间互相通信不必调用内核。