精通高并发与内核 | 解析 Linux 内核并发并行
前言
📫作者简介:小明java问道之路,专注于研究计算机底层/Java/Liunx 内核,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计📫
🏆 InfoQ 签约博主、CSDN 专家博主/Java 领域优质创作者/CSDN 内容合伙人、阿里云专家/签约博主、华为云专家、51CTO 专家/TOP 红人 🏆
🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~
本文导读
在网上书上,常常提及并发编程,然后吸引眼球,在前面加了一个高字,然后变成了高并发编程。
让大家觉得,并发编程为基础知识点,什么是刚并发,当在计算机中运行的任务数远大于执行指令的 CPU 个数时,方可称之为高并发。
本文将作为并发编程和 Linux 内核衔接,对线程、进程、接口设计等等基础进行详细解读,同样,请读者进行逻辑分析与知识推理,同时建立点、线、面关联。
本文也将作为 Netty、Tomcat 的线程模型设计架构 Linux 内核的基础,这些都是点,将会由使用他们的框架进行线的整合。
一、计算机中并行并发的推理路线
同样,我们先进行知识推理:
1、计算机三大基础组件,有 CPU、内存、硬盘
2.、CPU 用于控制其他组件,同时执行指令
3、内存用于存放运行的任务的数据+指令(告诉 CPU 要干啥)
4、硬盘用于持久化存放任务的数据+指令(怎么与内存的功能一样?是的,必须一样)
5、硬盘与内存的作用相同,理论上我们只需要 CPU +内存/硬盘即可,那么为啥偏偏需要这两者?是由于硬盘用于持久化,硬盘的数据并不会因为掉电而丢失,这就好理解了,所以硬盘必须。那么继续来看内存的作用,硬盘由于需要持久化,所以设计和实现必然速度远远慢于 CPU ,那么为了弥补这一缺陷,引入了速度远快于硬盘的内存,这时又由于内存因为速度设计,所以不得不放弃持久化的功能,所以两者互相弥补,增加运行速度。读者有没有发现内存是硬盘中的数据(程序的指令和数据)缓存。
6、这时,我们可以很容易的推理:在系统中集成多个 CPU ,大容量内存,同时可以将这些任务从硬盘中放到内存,然后多个 CPU 分别执行它们即可,这时将会极大增加计算机性能
那么,此时我们可以根据以上结论对并发与并行进行定义:
二、并行
当内存中的任务数正好等于 CPU 的核心数,那么理想情况下所有 CPU 都各自获取到了要执行的任务,那么,在同一时间将会有 CPU 核心数个数的任务在执行,这称之为并行
三、并发
当内存中的任务数正好大于 CPU 的核心数,那么理想情况下所有 CPU 都各自获取到了要执行的任务,这时将会有多余的任务得不到 CPU 执行,而 CPU 将会对这些多余的任务和当前执行的任务进行切换调度来分时(1S= 1000ms,500 ms 执行 A,500 ms 执行 B ,这时将一段时间切割给不同任务执行,这称之为分时执行)执行它们,这称之为并发
总结
本文将作为并发编程和 Linux 内核衔接,对线程、进程、接口设计等等基础进行详细解读,同样,请读者进行逻辑分析与知识推理,同时建立点、线、面关联。
版权声明: 本文为 InfoQ 作者【小明Java问道之路】的原创文章。
原文链接:【http://xie.infoq.cn/article/300026ee899e0b817d41a6955】。文章转载请联系作者。
评论