举例来说:程序员为女儿做蛋糕。
1、程序员需要食谱,食谱上写出了需要哪些原料,如何做。食谱就是程序,原料就是数据,程序员就是CPU。程序员按照食谱、对原料进行加工,做蛋糕的过程就相当于CPU执行代码、操作数据的过程。做蛋糕的过程就是进程。
2、做蛋糕可以分为几个小的步骤,这些步骤共同加工原料。每个小的步骤就是一个线程。比如做蛋糕进程可以分为以下几个线程:取原料(包括鸡蛋、面粉、奶油、糖、水等),混合原料,烘烤混合物。这些步骤之间存在一定的先后关系和互斥关系,比如:混合原料必须在取原料之后,二者不能同时进行。
3、假设程序员做蛋糕的时候,淘气的儿子跑进来,对爸爸说,被蜜蜂蛰了(相当于进来一个优先级更高的进程)。这时候,程序员就会暂停做蛋糕,同时记录做到了哪一步。然后拿出急救说明书(另一段程序),急救箱(另一端程序的数据),处理儿子的蛰伤(另一个进程)。处理完毕后,程序员接着原来的步骤继续做蛋糕。
1、进程是操作系统进行资源分配和调度的基本单位,线程是CPU调度的基本单位,是进程中一个单一顺序的执行流。
2、把进程当成做一件事情,操作系统管理进程,负责调度进程。具体怎么做?是进程的事。一个进程至少有一个主线程,可以有多个辅助线程,真正做事的是线程。进程做的事情:可以是一个线程按顺序一步一步做,也可以启动多个线程,协作完成。
3、进程有一块内存,也就是可执行文件装载到操作系统中,从上到下大致为:栈,堆,全局存储区,常量存储区,代码区。而线程可以认为是一个执行流,每个线程都有一个自己的调用堆栈,可以访问进程中的资源,对于共享资源需要进行同步控制。而一个进程是不能访问另一个进程的资源,只能通过进程间的通信传递数据。
4、进程之间的切换代价大,而线程之间的切换代价小。
5、多线程的使用场景:
a、对于UI界面,如果执行一个耗时的操作,为了让界面及时响应,可以重启一个线程,去执行。
b、同时有多个请求,可以创建一个线程池,来一个请求,从线程池中拿出一个空闲的线程处理。
c、对于网络数据的接受,创建一个线程用于接受数据,接受的数据保存在本地,处理之后一个一个转发出去。