@wangjialin
2017-03-22T22:35:47.000000Z
字数 1143
阅读 1179
os
假如没有进程,想要提高CPU的利用率,实现并发的话就只能在编写每一个程序的时候都要考虑,程序执行的时候该占用多大的内存,写数据的时候会不会互相影响,该怎么扩充其占用的内存空间,内存碎片怎么处理,堵塞该怎么让出CPU等等这些问题,非常复杂,因此引入了进程的概念。
当用多个进程完成一项任务的时候,往往他们之间需要相互合作,需要共享数据和通信,但是由于进程有独立的地址空间,所以进程之间通信比较麻烦,只能通过管道等方法而不能共享变量;由于进程有独立的地址空间,所以进程切换的时候不仅需要保存相关寄存器和栈等还需要进行切换页表,开销比较大;为了进一步提高并发性以及CPU的利用率,在进程内又引入了线程,没有自己的地址空间,共享进程的资源。
因此引入线程之后就可以说,进程是CPU进行资源分配的基本单位,线程是CPU进行调度的基本单位
进程和线程的最大区别就在于是否占有独立的地址空间,而这个区别也为他们带来了各自的优点和缺点。进程可靠性高但是开销大,线程开销小但是可靠性低。这样讲的话其实两个是互补的关系,根据实际开发情况的不同可以选择不同的模型。综合2、3,所以在一些需要并发处理并且需要共享一些变量的情况下,选择线程;其他情况下,进程的健壮性相对更好