java多线程:1进程和线程

多线程样例

我们用工人卸货举例:有一集装箱的货物等待卸车,共100个箱子,一个工人一次只能搬一个箱子。

  1. 如果只有一个工人,那么该工人需要搬运100次,而且是不停歇的搬运。
  2. 如果有5个或者10个工人,那么平均每个工人只需要搬运20或者10次就可以了。
  3. 甚至有100个工人,那么货物可以立刻被立刻搬空。
    从上面的例子中,我们可以看出,如果想尽快的搬运货物,最简单的办法就是增加搬运工人。

线程与进程的区别:

(1) 进程:一个具有独立运行环境的单元,拥有基本的、私有的运行环境和资源,尤其是内存空间。重点在系统调度和单独的单位。
 一个进程可以看做我们电脑上运行的一个程序或者应用程序,例如你的chorm浏览器可以看做一个进程。
(2) 线程:轻量型的进程,是CPU调度和分派的基本单位,比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,
(3) 上述的搬运集装箱就可以看做一个线程和进程,搬运工人是线程,而搬运货物可以看做是进程。
因此在多个线程访问内存资源(共同对象、资源)的时候,需要特殊处理。在运行时,只是暂用一些计数器、寄存器和栈 。  

进程和线程的关系

1、一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程(通常说的主线程)。
2、资源分配给进程,同一进程的所有线程共享该进程的所有资源,因此当进程中的一个线程出现OOM,那么这个进程的所有线程都结束运行。
3、线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
4、处理机分给线程,即真正在处理机上运行的是线程。
5、线程是指进程内的一个执行单元,也是进程内的可调度实体。  

从三个角度来剖析二者之间的区别
1、调度:线程作为调度和分配的基本单位(由cpu进行调度),进程作为拥有资源的基本单位(由系统进行调度)。
2、并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3、拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于该进程的资源。

为什么使用多线程

  1. 利用多核CPU
    现在的cpu都是多核,如果只有一个线程的话,那么该线程只能运行在单一cpu上,那么就造成了浪费。因此通过运行在不同cpu上的线程,提高效率。
    说明:以前操作系统中学的单核的多线程实现,其实是伪多线程,实际在运行的只是一个线程,通过cpu的时间片划分,切换线程执行,实现看起来是多个线程执行。但是因为只有一个cpu,同一时刻只有一个线程运行。
    cpu的多核同样带来一个问题,这也算是多线程带来的问题:线程的通讯、公共资源的访问。

  2. 解决单核cpu的阻塞,这个主要是单核cpu时,如果只有一个线程,那么当该线程因为网络问题,或者其他原因。

  3. 便于建模
    这是另外一个没有这么明显的优点了。假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

总结

多线程的最直接的意义就是:

  1. 最大程度的利用多核cpu。因为cpu调度的底层是线程,因此如果是4核cpu,那么只有一个线程的话,那么永远有3个cpu是浪费的。
  2. 让cpu做更有意义的工作,这个后续讲。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值