首先答案是“可以”,接下来就说说为啥可以。解释此问题可以从两个方面思考,一个是计算机如此复杂和强大的根本原因是什么?一个是硬件与软件的依赖关系是怎样的?明确了这两个问题的答案后,再回头看本问题,就会发现单核能够实现多线程是多么理所当然的事。
一、计算机如此复杂和强大的原因
了解过计算机和操作系统历史的人应该很快就能发现,计算机之所以会变得如此复杂和强大完全是“单核多任务”的实现与不断扩展导致的。计算机就是因为要实现“单核多任务”而变得复杂的,同时也是因为实现了“单核多任务”变得强大,然后在对“单核多任务”的不断扩展中变得更加强大。比如操作系统在最开始就只是个简单的“批处理系统”,本质就是个多任务管理工具,且是非并发的。
开始的计算机虽然庞大,但是远没有今天体积小得多的计算机强大和复杂。为啥呢?因为它处理的任务非常单一,而且并发性也很低。开始时就根本没有并发,只能执行最基本的纯数学计算,在彻底完成一个计算任务前无法开始第二个任务,就算开始第二个任务都要人来辅助操作。而其复杂化则是随着任务之自动推进的实现,以及进一步“并发”的实现开始跨越式发展的。
而所谓“单核实现多线程”的本质是啥呢?本质不就是“单核多任务”吗?只是这个“任务模型”比传统的“进程模型”颗粒更小了一点,从而进一步增加并发提升效率,对计算机的“单核多任务”这个核心模型而言,仅仅是量变,这为啥不能支持?答案当然就是支持。
二、计算机硬件与软件的依赖关系
不同软件对硬件的依赖程度区别很大,依赖最强的就是“固件”,它随硬件的生产一起被烧录在硬件上,一度只能读不能写,后面即使可以改动也要用“非常”手段,这种软件显然受硬件影响最大,典型的比如BIOS系统。但还有一种软件,其存在就是为了“无视硬件区别”的,卖点就是“跨平台”,它受硬件的制约就非常小,比如Java程序。
“单核”其实描述的是一种“硬件状态”,而“多线程”是一种软件机制,而且是很“软”那种,其实现离“硬件的细节”距离很远,受硬件的影响很小,与硬件是一种“解耦”状态,是“跨平台”的。就像学习汇编指令一般都会参照某个具体的机型进行,因为它是一种与硬件依赖性很强的软件,但是学进程或者线程这种任务机制,你有见过哪本教材要强调“机型”吗?
为啥不强调呢?当然就是与其无关或不受其影响,既然不受其影响,当然就是单核也好多核也罢,多线程机制都无所谓,都可以基于它们进行实现。
三、总结
最后补充一点的就是,本文标题为了方便说明,直接援引了别人的提问方式,而严谨的说法不应该是“单核可以实现多线程吗?”,而是“单核支持多线程吗?”,因为多线程就不是“核”这个硬件实现的,而是一种纯软件的实现。