课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
并发编程开发是目前大多数Java程序员都在使用的一种编程开发方式,而本文我们就通过案例分析来简单了解一下,Java并发编程开发基础知识分享。
1、即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。
我们知道,一个线程在一个时刻只能运行在一个处理器核心上,那么单核处理器支持多线程的意义在哪?
因为线程任务可以分为IO密集型或CPU密集型,当线程任务需要IO操作时,可以把CPU让出给需要计算逻辑的线程。
所以即使是单核处理器执行多线程任务时,也有可能比单线程快。另外,单核处理器不会出现多核处理器中多线程出现的问题。
2、多核处理器执行多线程任务就一定比单线程快吗?
答案同样是不一定,我们知道CPU是通过给每个线程分配时间片来实现多线程的,当任务执行一个时间片后就会切换下一个任务。
但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,这个过程叫做上下文切换。
毫无疑问,上下文切换会耗费许多时间,所以当另起的线程的上下文切换的时间比其省去的计算时间多时,多线程就更慢。
3、我们再来思考一个问题,当线程数小于CPU核心数时,多线程是否一定比单线程快?
答案同样是不一定,该问题的核心在于即使线程数小于CPU核心数,线程仍然会发送上下文切换。
因为多线程的本质是用时间片实现的,每个线程的时间片用完后都会发生上下文切换,即使有多余的CPU资源。
4、减少上下文切换的方法有无锁并发编程、CAS算法、使用少线程和使用协程。
使用少线程和协程很好理解,使用无锁并发编程为啥能减少上下文切换次数呢?
因为多线程竞争锁时,如果线程没有获取到锁,就会让出时间片给其他线程,从而引起上下文切换。
同理,使用CAS更新数据也是为了避免加锁。
5、上下文切换监测工具有Lmbench3、vmstat。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。