多线程模型

说到线程支持,当时我对此很困惑。
我记得那是2 02 2 年,在某个城市,我们公司的项目是三个线程模型,这就是复杂度。

第一个是多对一模型。
这个模型就像许多小虾被压进一个大蟹壳里。
其优点是管理方便、效果显着。
但问题是,如果一只小虾被卡在一个大蟹壳里,整个蟹壳就得等待。
就像进程中的所有线程都因为系统调用而卡住一样,整个进程就会瘫痪。
这在多核处理器中尤其重要,因为只有一个线程可以访问核心,而其他线程必须排队。

然后是一对一模型。
这就好比每只虾都有自己的龙虾壳,每个都是独立的。
这样做的好处是,如果一只虾被卡在一个壳里,另一个壳里的虾仍然可以自由活动。
但缺点是创建shell非常费力,且承载高性能,所以系统一般会限制线程数。

最后是多对多模型,看起来就像一群小虾在多个蟹壳之间来回跳跃,非常灵活。
好处是,只要有足够的蟹壳,你就可以创造任意数量的虾。
但这种模型也存在问题,就是线程调度复杂,容易出现问题。

嘿,说到这里,我在开始这个项目的时候很困惑。
后来我才意识到,也许我有偏见。
每种型号都有适用的场景,您应该根据实际情况进行选择。
不过现在想来,这个项目确实很有趣。

零基础入门超线程技术

超线程分为CGMT、FGMT和SMT。

CGMT 使用 ICache/DCache miss 来改变顺序。
比如早期的Intel Core i7 就用了这个。

FGMT 每个周期采用不同的序列索引。
这是 AMD Zen 早期使用的。

SMT 在超标量方面与 FGMT 类似。
现代英特尔酷睿 i5 /i7 使用此。

减少缓存行大小可以解决冲突。
例如,第 6 4 B 行更改为 3 2 B。

超线程可用于优化、拜占庭容错和单线程并行等。

称一下体重。

Netty的Reactor多线程模型,NioEventLoop,ChannelPipeline简介

Reaktor的多线程模型由这三部分组成。

mainReactor负责监听接收事件。
接收者负责将其传输到 subReactor。
subReactor负责读写。

当通道向选择器注册时,它必须显示有趣的事件。
就像阅读、写作和联系一样。

ChannelPipeline 使用责任链模型来实现。
双列表,固定头尾。

传入事件从头到尾发送。
传出事件从 Tail 发送到 Head。

异常从有问题的操作符传递到 Tail。
尾巴负责完成。

理解Reaktor模型可以用Netty来实现。
我一开始只是不了解Reactor,浪费时间。

你自己看看。