多进程多线程
进程——操作系统资源分配的最小单位
线程——是操作系统cpu调度的最小单位
进程
进程产生由来:计算机一次只能执行一个任务,如果某个任务需要从i/o设备读取大量数据,此i/o操作过程中cpu是空闲的,可以用来进行其他操作。因此发明了进程,用进程来对应一个任务。
进程的特点:每个进程有独立的内存空间,进程间互不相关,由操作系统来进行调度。
多进程并行:当时cpu还没有多核、多线程的概念,为了达到多进程并行运行的目的,采用了分时的方式,即把cpu的时间分成很多片段,每个片段只能执行某个进程中的指令。虽然从操作系统和cpu的角度来说还是串行处理的,但是由于cpu的处理速度很快,从用户的角度感觉像是多进程并行处理。
进程间通信:由于每个进程有独立的内存空间,进程间互不相关,但是有时候希望两个进程之间能够进行通信。如果不能通信只能是a存储到磁盘,b需要数据再从磁盘读取,效率低且设计复杂。为了解决进程间通信的问题,设计出了包括管道、消息队列、信号量、共享存储等各种方式。
线程
线程产生由来:多进程能让多任务并行处理,但是单个进程内部只能串行处理。实际上进程内部的各个子任务并不要求严格按照时间顺序来执行,也需要并行处理。因此发明了线程。
线程的特点:线程是进程内部的子任务,共享一份进程数据。为了保证共享数据的准确性,又发明了互斥锁机制。
对比维度 |
多进程 |
多线程 |
总结 |
数据共享、同步 |
数据共享复杂,需要用ipc;数据是分开的,同步简单 |
因为共享进程数据,数据共享简单,但也是因为这个原因导致同步复杂 |
各有优势 |
内存、cpu |
占用内存多,切换复杂,cpu利用率低 |
占用内存少,切换简单,cpu利用率高 |
线程占优 |
创建销毁、切换 |
创建销毁、切换复杂,速度慢 |
创建销毁、切换简单,速度很快 |
线程占优 |
编程、调试 |
编程简单,调试简单 |
编程复杂,调试复杂 |
进程占优 |
可靠性 |
进程间不会互相影响 |
一个线程挂掉将导致整个进程挂掉 |
进程占优 |
分布式 |
适应于多核、多机分布式;如果一台机器不够,扩展到多台机器比较简单 |
适应于多核分布式 |
进程占优 |
多进程多线程对比
()