根本区别
进程:是操作系统分配资源的最小单位
线程:是程序执行和调度的基本单元
开销区别
进程具有自己的独立内存空间,因此在进程间切换时的开销比较大;
在同一进程中的线程共享内存空间,线程间的切换开销小;除CPU外,系统不会为线程分配其他内存资源。
进程间通信
管道
一个进程向存储空间的一端写入信息,另一个进程存储空间的另外一端读取信息,这个就是管道。
信号量(semaphore)
主要作为进程间以及同一进程不同线程之间的同步手段。
在计算机中,信号量实际上就是一个简单整数。一个进程在信号变为0或1的情况下推进,并将信号变为1或0来防止别的进程同时推进。当该进程完成任务后,则将信号再改为0或1,从而允许其他进程执行。从而我们也可以看出,信号量已经不只是一种通信机制,更是一种同步机制。
共享内存
共享内存(shared memory)可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以
套接字
套接口(socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。
消息队列
消息队列是一列具有头和尾的消息排列,新来的消息放在队列尾部,而读取消息则从队列头部开始。这样看来,它和管道十分类似,一头读,一头写?的确,看起来很像管道,但又不是管道:
(1)消息队列无固定的读写进程,任何进程都可以读写;而管道需要指定谁读和谁写;
(2)消息队列可以同时支持多个进程,多个进程可以读写消息队列;即所谓的多对多,而管道是点对点;
(3)消息队列只在内存中实现,而管道还可以在磁盘上实现;