Java多线程学习<一>--什么是多线程及其优劣势

为什么需要多线程

  1. 计算机cpu从单核到多核, 需要处理的任务也越来越多,多线程的出现,便是为了更好的利用多核cpu的利用率

  2. cpu在读取L1,L2,内存,磁盘的数据的时候,速度差距很大,导致cpu空余时间一直在等待状态,性能浪费,在cpu空余的时候,如果去执行其他任务,就会将其性能充分地利用起来
  3. 线程的创建相对于进程而言开销更小,而且线程间通讯也更加方便,线程与线程之间就如同同一个房间不同的座位一样,而进程之间就如同同一个屋檐下的相对独立的不同房间

附上cpu缓存内存交互时间

 

多线程是什么

从资料的中linux内核创建进程和线程的过程介绍来看,

创建线程和创建普通的进程类似,只不过需要在调用do_fork的时候需要传递不同的flag来指明需要共享的资源,使用pthread_create方法来进行创建,最终会调用到do_fork方法。

线程可以看做是共享了父进程空间的一系列子进程,与重新fork进程不同,多个线程之间有资源共享,也有自己独占的资源。

多线程有哪些优势,带来什么样的问题

优势:

  1. 充分利用了CPU的空闲时间,更好地利用系统资源,用尽可能少的时间来对用户的要求做出响应,使得进程整体运行效率得到较大提高
  2. 多线程之间会有内存的共享,创建线程不会像开辟新的进程一样开销很大,可以说线程是更加轻量化的进程

问题:

  1. 上下文切换带来的性能损耗,切换上线文因为要记录上次任务的执行状态的,会有一定的性能损耗,在简单的任务下,cpu频繁地切换线程有时候反而会出现多线程执行比串行执行慢的情况,所以在代码中也要注意使用最少线程,避免创建不需要的线程,以减少上下文切换带来的损耗
  2. 缓存一致性问题,不同的线程除了共享的主存外,都会有自己线程私有的内存空间,将数据从主存加载都私有缓存中处理,就会有线程安全问题出现,这个也是多线程应用中需要主要注意和处理的问题
  3. 多个线程竞争共享资源,多个线程是共享计算的硬件如磁盘读写,网路带宽等,必然会出现相互竞争资源抢夺的情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值