什么是线程?什么是进程?线程与进程的关系
定义:
进程:资源分配的基本单位,执行的程序就是一个进程
线程:是CPU独立运行和独立调度的基本单位,是进程内部一条执行路径或序列,也叫轻量级进程,一个线程只能属于一个进程,而一个进程可以并发多个线程,每条线程并行执行不同的任务。线程自己不拥有系统资源,但拥有各自的计数器、栈空间等,用来存放所有局部变量和临时变量,能够访问共享的内存变量。
两者的区别:
1) 定义上的区别和从属关系(如以上总结);
2) 资源:进程是可以申请和拥有系统资源,是一个动态的概念,进程之间相互独立,线程共享进程的资源;
3) 并发性:进程之间可以并发执行,同一进程的所有线程之间也可以并发执行;
4) 通信:进程间通信IPC(管道、消息队列、共享存储、Socket等),线程间可直接读写进程数据段通信;
5) 开销:线程上下文切换比进程上下文切换快
线程执行开销小,但不利于资源的保护和管理
IPC(Inter-Process Communication):
是共享命名管道的资源,它是为了让进程间通信而开发的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道,并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
进程间通信:
1) 管道:半双工通信,数据只能单向流动
无名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,父子间
命名管道:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以进程间通信
2) 消息队列:在内核中创建一队列,队列中每个元素是一个数据报,不同的进程可以通过句柄去访问这个队列。
3) 信号量:是一个计数器,用于控制多个进程间对共享资源的访问。
4) 共享存储:将同一块物理内存一块映射到不同的进程的虚拟地址空间中,实现不同进程间对同一资源的共享。
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。
参考书籍《Java并发编程的艺术》