有了进程还引入线程的本质原因
linux中,线程是以轻量级进程实现的,在内核看来,线程就是进程没有区别,为什么还引入线程呢?1.节省空间,对于进程a正在执行的任务1阻塞了,这个想要使用另一个进程b去完成进程a的任务2的效果(如果需要的话并将结果传回给进程a),那么进程b就要对进程a的很大一部分资源(代码,数据)都要进行一部分拷贝,这就造成了在这些数据在内存中的重复,浪费了空间。而线程的引入解决了空间上的开销,linux中
linux中,线程是以轻量级进程实现的,在内核看来,线程就是进程没有区别,为什么还引入线程呢?
1.节省空间,对于进程a正在执行的任务1阻塞了,这个想要使用另一个进程b去完成进程a的任务2的效果(如果需要的话并将结果传回给进程a),那么进程b就要对进程a的很大一部分资源(代码,数据)都要进行一部分拷贝,这就造成了在这些数据在内存中的重复,浪费了空间。而线程的引入解决了空间上的开销,linux中线程以轻量级进程的方式实现,与普通进程不同的地方就是轻量级进程可以共享其它进程的内存空间以及资源,所以无须一份资源拷贝。
2.节省时间,进程在切换的时候核心的步骤 1.有虚拟内存空间的切换,从task_struct(即pcb)中获取页表的物理地址,放入页表寄存器CR3中即可。2.进程内核栈的切换,从task_struct中获取进程内核栈地址进行切换。 3.进程用户堆栈的切换以及寄存器的保存。而轻量级进程(即线程)其实也是有task_struct,在切换的过程中也是由内核通过task_struct进行管理,也需要经历上述的步骤,但唯一不用经历的是 1与2,因为线程共享进程的页表和内核栈,但这两者的切换在时间上也是可以忽略不计的,真正节省时间是因为不用切换虚拟内存空间从而导致TLB不会被清空不会失效,若切换进程则TLB则会失效。
更多推荐
所有评论(0)