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

开发 前端
不同软件对硬件的依赖程度区别很大,依赖最强的就是“固件”,它随硬件的生产一起被烧录在硬件上,一度只能读不能写,后面即使可以改动也要用“非常”手段,这种软件显然受硬件影响最大,典型的比如BIOS系统。

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

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

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

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

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

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

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

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

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

三、总结

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

责任编辑:武晓燕 来源: Web学社
相关推荐

2020-12-28 08:03:26

多线程进程浏览器

2022-11-22 14:39:40

CPU单核多核

2023-04-02 17:53:10

多线程编程自测

2019-03-28 14:10:53

CPU单核

2009-04-27 12:26:45

AMD单核Nehalem

2024-04-17 09:52:00

操作系统多线程内存

2023-07-11 08:34:25

参数流程类型

2023-10-31 09:04:21

CPU调度Java

2023-11-02 10:24:34

2018-04-12 13:53:19

2021-12-14 07:40:07

多线程面试CPU

2010-09-17 09:08:49

Java多线程

2009-03-12 10:52:43

Java线程多线程

2021-08-05 05:02:04

DPU数据中心Pensando

2024-01-15 16:04:15

2011-06-20 13:43:08

Qt Socket 线程

2022-10-11 08:14:14

多线程锁机制

2009-08-13 09:07:36

Java多线程

2011-08-29 16:16:22

Lua函数多线程

2023-01-30 23:04:10

B-Treegolang优化
点赞
收藏

51CTO技术栈公众号