为什么会用到多线程?

发现很多文章都没有从本质上说清楚为什么需要多线程,灵感来自《JAVA并发的艺术》,总结一下(以下只是个人理解):

为什么联发科的“超多核”处理器玩游戏会卡?为什么处理器没有无限制的增加核心数?

因为日常生活需要集中运算力的需求多是游戏,游戏基本没有针对CPU多核心做优化。

举个例子:像大型端游,大部分的CPU计算力需要主攻玩家的互动状态,以及用户画面的实时更新。

这个过程计算的目标不多,但又不能拆分进行多线程计算,所以就讲究单线程(单核)的计算力。

这也就是为什么现在市面的cpu为什么不无限的增加cpu,因为游戏时需要单核的运算力。

但是当CPU把运算好的画面数据交给GPU渲染(输出到显示器)时,又讲究GPU的计算力了,因为GPU是典型的多核心运算。

这就用到了多线程,因为画面是一帧一帧显示的(注:视频是由很多张图片连续播放实现的,每一张称为一帧)。

实际上CPU和GPU运行原理一样,但是GPU有更多核心,目的就是提高并行的执行力,以快速的渲染视频。

在计算机中并行是真正的同时执行,需要多个物理核心的支持。并发是切换0时间片的概念(就是压榨核心的计算力)。

矛盾冲突:CPU开启多线程不就可以代替GPU了?

一个人的精力毕竟有限,你不能让我边吃边拉shi吧?就好比你的嘴用来吃饭,屁股我就不说了~

矛盾冲突:既然这样为什么不把CPU设计成多核的?

按我的理解是一方面实现按需选取配置,还有就是实现分工处理数据,

还有就是你看现在的显卡需要很多风扇才能压住温度,太猛了!!!

这就好比你为什么补涨两个嘴,消化完,直接从另一个嘴出来?

敲黑板:我们得明白计算机是模拟人脑造出来的,其实是人脑的代替品,你非要刨根问底,你得去研究宇宙了。

单线程处理的过程是这样的:

处理第一帧,然后第二帧,第三帧。。。。都在后面排队。假如每个图片输出需要5ms,1000张就需要5000ms。

敲黑板:

处理一帧画面用不了太多GPU的计算力,但还是会消耗少量时间。

就好比你切菜觉得很简单,我一次给你一个菜叶,连着给你100个试试?

多线程处理的过程是这样的:

比如我们开启10个线程,实际上就是一次拿出10帧画面,多个线程同时处理。目的就是压栈CPU的计算力

敲黑板:

多线程实际上加大了线程切换的开销,但是成功压榨GPU核心的计算力。我们还是切菜为例,不过这次我一次给你摆放10个菜叶,让你连着切没有休息的间隙,你很快切完1000个菜叶。

现在我们明白了,当处理大型任务时(游戏)可以使用单线程,处理碎片化任务时开启多线程。

就好比我搬一桶水基本把我们的力量全用上了,但是让我切一片菜叶,不费吹灰之力,我们可以同时切多个。

计算机里面的多线程并发并不是真正的同时运算。比如切菜叶它(cpu)是一个个切的,只不过它连续切,而且速度快,你看了一个假象,认为是并行(同时运行)的。

参考文档:http://ask.zol.com.cn/x/5690565.html

原文地址:https://www.cnblogs.com/djq1234/p/12489371.html