为了突破CPU的主频提高到一定程度遇到的瓶颈,可以采用?

多核CPU是解决主频瓶颈的高手。
为了避免编程问题,请使用多核编程。

多核编程就是关于并行性和分布。
协作资源分配和任务调度是技能。

大多数程序员没有这双手,但他们可以玩弄许多并行算法。

多核编程旨在为您提供一套通用方法。
您不需要学习复杂的算法。
可以并行创建现成的串行算法。

关键是要均匀地划分内核,不要让它们闲置。

在多核时代,编程需要根据情况分为块、进程或线程。

通常使用线程,因为线程是轻量级的,允许轻松通信,提供许多支持选项,并且易于理解。

您可以根据应用程序、线程或进程自行了解应该使用哪一个。

那些年让你迷惑的并行、并发、多线程、多进程、协程

嘿嘿,这东西看起来太大了吗?我自己面临的陷阱是,当我第一次学习它时,我认为它们都是一样的,但是当我开始使用它们时,我发现它们完全不同。
好吧,让我尝试用通俗的语言向您解释一下。

上周一位客户问我为什么他们的 Python 程序很慢。
当我看到这个时,我实际上在单核CPU上使用了多个进程,结果比单线程慢。
这个人一头雾水,我说你看他,多重运算是什么?操作系统打开三个独立的窗口,每个窗口运行一个程序。
内存和资源都是独立的,因此在它们之间切换会非常繁琐。
在单核CPU中,无论你打开多少个窗口,最后不还是会有一个人(CPU核心)轮流为你服务吗?当然,如果你有一个多核CPU,实际上可以运行多个进程。
这就是传说中的并行性——它应该有硬件支持。

我们来谈谈同步。
这个东西与硬件无关,它可以在单核上运行。
例如,如果你同时打开浏览器、观看视频、浏览网页、回复消息,你感觉好像在同时做这些事情,但实际上,CPU 可能会在这些任务之间快速切换。
这就像小餐馆里厨师在两桌顾客之间来回跑动,做饭、上菜。
从宏观上看,似乎是同时忙碌,但从微观上看,却是轮流工作。
多核CPU运行多个线程相当于有两个厨师同时运行。
这就是并行中的并发。

然后是主题的多样性。
这就是在一个程序中开启许多个“小帮手”,这些帮手共享同一个“大房子”(进程内存)。
优点是通讯方便,因为都在一个屋檐下。
缺点是很容易打架——想想看,如果很多人同时想要改变同一个东西,肯定会发生什么事情,所以他们需要锁之类的东西。
这适用于 I/O 密集型任务,例如服务器接收请求并大部​​分时间等待网络。
在等待CPU的同时,其他线程可以做其他事情。
多线程轮流运行在单核上,也可以同时运行在多个核上(如果是分布式的)任务)。
协程更有趣。
这个东西就是程序本身说“我会暂停一会儿,等数据到了再继续”,而不是CPU突然打断你(配合)。
你可以想象,在一个线程中打开了无数个“小隔间”,每个隔间都可以自行暂停。
这对于I/O密集型应用程序来说尤其方便,因为在等待网络数据时,程序可以自行运行到其他“隔间”,效率很高。
例如,网络爬虫使用Python同步。
一个主线程挂起 1 00 个请求,并在第一个数据到来时继续处理。
与此同时,其他9 9 人也在排队等待数据。
看起来有 1 00 个线程在运行,但实际上只有 1 个线程。

总结一下我的理解:

为了快速(并行)操作,必须有多个CPU核心(并行基础)。

为了速度感(并发),可以使用多核、多进程、多线程、协程(根据场景而定)。

多进程适合计算量大,需要隔离,但开销较高。

多线程适合那些有大量I/O和数据操作,并且开销较低的情况。

协程适合高并发的I/O操作,它们是轻量级的,但必须是异步的。

在单核CPU中,多进程是没有用的,多线程处理器轮流进行。

在多核CPU中,多个进程和线程可以同时工作。

这个问题我还在想。
例如,分布式计算是否需要多个进程?我感觉这部分我还没有亲身经历过。
无论如何,这取决于你。