一、进程、线程
1、概念:
进程是表示资源分配的基本单位,或者说是调度运行的基本单位。例如:用户运行自己的程序,系统就创建一个进程,并为它分配资源,内存空间、磁盘空间、I/O设备等。进程被放入进程的就绪队列,为它分配CPU及其它有关资源,进程开始运行。所以,进程是系统中的并发执行单位
线程是进程执行运算的最小单位,进程逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。
when(何时需要多线程):①多用户请求的高并发 ②大任务
why (多线程的好处): ①易于调度 ②提高并发性③开销小,创建线程比创建进程快,所需开销很少④利于充分发挥多处理器的功能,每个线程在一个处理器上运行,从而实现并发性,让每个处理器充分运行
why not(多线程的问题):①多线程的切换,影响性能 ②更多的线程需要更多内存空间 ③存在线程安全问题,如死锁等情况的发生
2、进程、线程关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指 进程内的一个执行单元,也是进程内的可调度实体。
协程 :又称微线程,是比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。好处就是性能得 到很大的提升,不会像线程切换那样消耗资源。
3、进程、线程区别
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
4、通信方式
1、进程间通信
(1)管道及有名管道
管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信
(2)信号
(3)消息队列
(4)共享内存
最有用的进程间通信方式,使得不同进程可以访问同一块内存,且看到对共享内存中数据的更新。但需要依靠同步操作,如互斥锁或信号量等
(5)信号量
主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段
(6)套接字
这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
2、线程间通信
(1)同步,多个线程通过synchronized关键字这种方式来实现线程间的通信。
(2)while轮询,利用volatile关键字的可见性
(3)wait/notify/notifyAll机制
(4)管道通信
5、进程、线程性能比较![在这里插入图片描述](https://img-blog.csdnimg.cn/039a07256dc04a8496cca5e1da445d1e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM1NDExNTgy,size_16,color_FFFFFF,t_70)
结论:
①需要频繁的创建与销毁,优先使用线程。比如说在web应用中,需要频繁的创建与销毁连接,这时使用多线程为佳。
②后台需要大量的计算,优先使用线程。一般需要保证用户界面响应速度的系统都需要使用多线程,将后台运算和用户界面分成两个线程。
③需要保证系统的稳定性,使用进程。对于需要长时间保持运行的程序,尽量使用进程。