什么网站做简历好,建筑公司网站源码开源,建站网站 国外,怎样推广自己的app多线程的提升方向 主要方向在于优化算法和将硬件的性能发挥到极致想要发挥出更多的硬件性能#xff0c;最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率操作系统已经解决了磁盘和网卡的利用率问题#xff0c;利用中断机制还能避免 CPU 轮询 I/O 状态#xff0c;也提… 多线程的提升方向 主要方向在于优化算法和将硬件的性能发挥到极致想要发挥出更多的硬件性能最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率操作系统已经解决了磁盘和网卡的利用率问题利用中断机制还能避免 CPU 轮询 I/O 状态也提升了 CPU 的利用率。但是操作系统解决硬件利用率问题的对象往往是单一的硬件设备而我们的并发程序往往需要 CPU 和 I/O 设备相互配合工作也就是说我们还需要解决 CPU 和 I/O 设备综合利用率的问题。如果 CPU 和 I/O 设备的利用率都很低那么可以尝试通过增加线程来提高吞吐量。 创建多少线程数合适 我们的程序一般都是CPU和I/O操作交互执行的其中I/O设备的速度要比CPU慢的多所以I/O操作时间也要比CPU操作时间长的多这种情况被称为I/O密集型计算 最佳的线程数是与程序中 CPU 计算和 I/O 操作的耗时比相关的单核最佳线程数 1 I/O 耗时 / CPU 耗时多核最佳线程数 CPU 核数 * [ 1 I/O 耗时 / CPU 耗时]还有一个与之相对的被称为CPU密集型计算大部分场景下都是纯CPU计算 对于 CPU 密集型的计算场景理论上“线程的数量 CPU 核数”就是最合适的不过在工程上线程的数量一般会设置为“CPU 核数 1”这样的话当线程因为偶尔的内存页失效或其他原因导致阻塞时这个额外的线程可以顶上从而保证 CPU 的利用率。
注意工作中都是按照逻辑核数来的理论值和经验值仅供参考实际上还是要靠压测 方法是怎么执行的 当你调用一个方法时CPU 要先找到方法的地址然后跳转到这个地址去执行代码最后 CPU 执行完方法后返回。 CPU 去哪里找到调用方法的参数和返回地址以及局部变量 通过 CPU 的堆栈寄存器CPU支持的栈结构被称为调用栈每个方法在调用栈里都有自己的独立空间称为栈帧每个栈帧里都有对应方法需要的参数和返回地址以及局部变量。当调用方法时会创建新的栈帧并压入调用栈当方法返回时对应的栈帧就会被自动弹出。也就是说栈帧和方法是同生共死的。调用栈和线程之间是什么关系每个线程都有自己独立的调用栈。局部变量的作用域是方法内部也就是说当方法执行完局部变量就没用了 Java 方法里面的局部变量是否存在并发问题 没有。因为每个线程都有自己的调用栈局部变量保存在线程各自的调用栈里面不会共享所以自然也就没有并发问题。