使用java多线程码代码有几年了,自己未仔细考虑过为什么要使用多线程,下面就自己查阅的一些资料进行记录一下。
- 摩尔定律失效
当前的科学技术水平无法使CPU频率继续提升,硬件工程师们异想天开的将多个cpu核心(ALU等)集成到一个CPU中,或者干脆多个CPU借助特殊板子来协同工作(简书介绍:https://www.jianshu.com/p/7969ea0d5526;英特尔官网:https://ark.intel.com/content/www/cn/zh/ark.html#@PanelLabel122139)。 - 操作系统支持
操作系统层面需要对多核心进行并发支持,Linux通过多进程实现并发操作,Linux中有一个子进程的概念,子进程集成父进程大部分属性,在unix中,子进程通常为系统调用fork的产物。windows对子进程支持不是太好,大部分采用一个进程下面采用多线程并发模式。 - 程序语言层面支持
适应操作系统对硬件架构的支持,从语言层面提供多线程开发支持。
小结:如果硬件足够快,我们也许可以不用多线程这个操蛋玩意。
相关概念:
- 进程是操作系统关于资源分配和调度的一个独立单位,是程序关于某个数据集合上的一次运行活动。
- 线程是cpu调度的最小单位,必须依赖与进程而存在。
并发编程意义:
- 充分利用CPU资源。
- 加快响应用户的时间。
- 可以使你的代码模块化、异步化、简单化。
并发编程需要注意的问题:
- 线程之间的安全性需要把握。
- 避免线程之间死锁问题。
- 避免线程过多导致服务器资源耗尽的问题。
并发数计算公式(按1秒时间段计算):
1000(1000毫秒)* CPU数量 * 核心数量/(CPU切片轮换时间 + 程序执行时间)