进程和线程的区别
- 引入线程的目的:在传统的操作系统中,拥有资源和程序执行的基本单位都是进程,但是为了提高操作系统的并发性能,引入线程作为基本的CPU执行单元。
- 进程和线程的关系:一个进程可以由多个线程组成,同一进程的线程可以并发执行,进程拥有独立的地址空间,同一进程的线程可以共享进程的资源,所以同一进程内的线程切换时,时空开销很少。
- 资源拥有方面:进程是拥有资源的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,线程可以访问所隶属进程的资源。
- 通信方面:线程之间的通信更方便,进程之间的通信需要以进程间通信实现。
- 创建销毁方面:创建和撤销一个线程比启动一个进程的开销要小。
进程之间的通信方式
1.共享存储:在通信进程之间存在一块可以直接访问的共享空间,通过对这块共享空间的读写操作,实现进程之间的通信。
2.消息传递:
- 直接通信方式:利用系统提供的进程消息发送和消息接收功能进行通信。
- 间接通讯方式:发送进程先把消息发送到某个消息存储设备当中,接收进程从这设备当中消费消息。
3.管道通信:是消息传递的特殊方式,发送进程向管道写入数据,接收进程从管道中读取数据。
4.信号量(PV操作)在系统中创建一个信号量集合(本质是个数组),可以使进程互斥地访问临界资源。
线程之间的通信方式(Java线程之间的通信)
1.锁机制
2.使用Object类的wait() 和 notify() 方法
3.使用JUC工具类 CountDownLatch
4.关键字synchronize,volatile
多进程与多线程的区别
线程共享所属进程的资源,所以
- 线程之间的通信比进程之间的通信更有效、更容易。
- 上下文切换的时空开销也较少。