总结进程与线程的区别(java)

  我们知道当前的cpu,都是多核心cpu,需要一定的编程技巧,把要完成的任务,拆解成多个部分,并且分别让他们在不同的cpu上运行,充分利用多核心的资源。通过“多进程”编程的模式,其实就可以起到“并发编程”的效果,因为进程可以被调度到不同的cpu上运行,此时,就可以把多个cpu核心都很好的利用起来。

  但是,这也带来了新的麻烦。

  在服务器开发的圈子里,这种并发编程的需求场景是非常常见的,作为一个服务器,要能够同时给多个客户端提供服务,如果同一时间来了很多客户端,服务器如果只能利用一个cpu核心工作,速度就会比较慢。

  面对这种情况,一种典型的做法是每当一个客户端连上服务器了,服务器就创建一个进程,给客户端提供服务,这个客户端断开了,服务器再把进程给释放掉。如果这个服务器,频繁的有客户端来来去去,服务器也就需要频繁地创建/销毁进程。这就会使服务器运行速度变慢。

线程的概念

  进程一次次创建/销毁的开销比较大,引入线程的目的,就是为了解决上述进程太“”的问题。

线程thread,也被称为“轻量级进程”。可以理解为“进程的一部分”,一个进程中,可以包含一个线程,或者多个线程。描述进程,使用的是pcb结构体,事实上,更严格的说,一个pcb其实是描述一个线程的,若干个pcb联合在一起,是描述一个进程的。进程与pcb之间相当于是1对多。

线程的创建/销毁开销更小。具体原因是同一个进程的各个线程之间是共享资源的。

pcb中,同一个进程的各个线程的内存指针和文件描述符表是共享的。线程中new了一个对象,线程2是可以访问到的;线程1打开一个文件,线程2也是可以直接使用的。但是每个线程都是独立的在cpu调度执行。

线程是系统调度执行的基本单位。

进程是系统资源分配的基本单位。

线程比进程更轻量的原因就在于进程创建/销毁的过程中涉及到资源分配/资源释放,而创建线程就相当于资源已将有了,省去了资源分配/释放的步骤了。同一个进程包含N个线程,这些线程之间是共用资源。只有创建第一个线程的时候(也就是创建进程的时候),会去进行资源申请操作。后续在创建线程,都没有申请资源的过程了。

延续开头提到的问题,当一个客户端连上来的时候,服务器分配给他一个线程,会比分配一整个进程,起到更好的优化效果。

举一个例子

  以上,关于进程和线程的区别和联系,希望对你有帮助。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值