进程就是 a program in execution。
进程的运行由OS控制,包括如何分配存储资源和cpu。存储资源的分配包括代码区、数据区、堆栈区(理论上堆栈区可以达到4G)。
进程的运行过程通过PCB控制,存放运行中的所需要的一切的一切状态,包括process state:new------ready--------------running-------waiting-------terminated。
多个进程产生的多个PCB一般由数组实现(局部性原理),再用一指针指向所有ready的进程。
process creation:典型的树结构:command---》shell process-----》kernel;
process termination:写代码的return实际是返回OS,返回的值要自我约束,没有统一规范。
进程的基本原则是彼此分离,进程和进程的cooperation通过message passing(稍好)、shared memory实现。
c程序打出来的是虚拟地址,不是实际物理地址。
线程的基本原则是共享,除了id、register、stack。出现的最大的意义是,可以使用一个线程实现耗时操作,另一个线程实现对于用户的响应(android比ios耗时的原因?)
线程的实现可以由user thread或者kernel thread级实现,user级显然自我定制程度更好,不与kernel交互因此更有效率,而当一定要与kernel交互的时候,比如io操作,由于OS看到的其实只有一个thread,因此一个user thread阻塞整个都阻塞。
一些对比: 线程 进程
ie、FF chrome
IIS apache
线程能干的事肯定进程也能干,线程更效率,不管时间和空间;进程更稳定,但开销更大。至于安全,表面上看,进程更安全,但实际因素太多了。