我们聊聊单核可以实现多线程吗?

2024年 2月 1日 64.7k 0

首先答案是“可以”,接下来就说说为啥可以。解释此问题可以从两个方面思考,一个是计算机如此复杂和强大的根本原因是什么?一个是硬件与软件的依赖关系是怎样的?明确了这两个问题的答案后,再回头看本问题,就会发现单核能够实现多线程是多么理所当然的事。

一、计算机如此复杂和强大的原因

了解过计算机和操作系统历史的人应该很快就能发现,计算机之所以会变得如此复杂和强大完全是“单核多任务”的实现与不断扩展导致的。计算机就是因为要实现“单核多任务”而变得复杂的,同时也是因为实现了“单核多任务”变得强大,然后在对“单核多任务”的不断扩展中变得更加强大。比如操作系统在最开始就只是个简单的“批处理系统”,本质就是个多任务管理工具,且是非并发的。

开始的计算机虽然庞大,但是远没有今天体积小得多的计算机强大和复杂。为啥呢?因为它处理的任务非常单一,而且并发性也很低。开始时就根本没有并发,只能执行最基本的纯数学计算,在彻底完成一个计算任务前无法开始第二个任务,就算开始第二个任务都要人来辅助操作。而其复杂化则是随着任务之自动推进的实现,以及进一步“并发”的实现开始跨越式发展的。

而所谓“单核实现多线程”的本质是啥呢?本质不就是“单核多任务”吗?只是这个“任务模型”比传统的“进程模型”颗粒更小了一点,从而进一步增加并发提升效率,对计算机的“单核多任务”这个核心模型而言,仅仅是量变,这为啥不能支持?答案当然就是支持。

二、计算机硬件与软件的依赖关系

不同软件对硬件的依赖程度区别很大,依赖最强的就是“固件”,它随硬件的生产一起被烧录在硬件上,一度只能读不能写,后面即使可以改动也要用“非常”手段,这种软件显然受硬件影响最大,典型的比如BIOS系统。但还有一种软件,其存在就是为了“无视硬件区别”的,卖点就是“跨平台”,它受硬件的制约就非常小,比如Java程序。

“单核”其实描述的是一种“硬件状态”,而“多线程”是一种软件机制,而且是很“软”那种,其实现离“硬件的细节”距离很远,受硬件的影响很小,与硬件是一种“解耦”状态,是“跨平台”的。就像学习汇编指令一般都会参照某个具体的机型进行,因为它是一种与硬件依赖性很强的软件,但是学进程或者线程这种任务机制,你有见过哪本教材要强调“机型”吗?

为啥不强调呢?当然就是与其无关或不受其影响,既然不受其影响,当然就是单核也好多核也罢,多线程机制都无所谓,都可以基于它们进行实现。

三、总结

最后补充一点的就是,本文标题为了方便说明,直接援引了别人的提问方式,而严谨的说法不应该是“单核可以实现多线程吗?”,而是“单核支持多线程吗?”,因为多线程就不是“核”这个硬件实现的,而是一种纯软件的实现。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论