# 美国服务器多核并行编程技术

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/27938.html | 发布：2024-03-12 | 更新：2024-03-12 | 分类：服务器vps推荐

[美国服务器](https://www.mfisp.com/shop/usvmidc)目前主流的系统都是冯诺依曼架构的，即共享内存的计算模型，这种过程计算模型对[美国服务器](https://www.mfisp.com/shop/usvmidc)的并行计算并不友好，该架构中有如下设计特点：

 

1、多个CPU核心改善美国服务器处理器的计算处理能力；

 

2、多级cache改善[美国服务器](https://www.mfisp.com/shop/usvmidc)CPU访问主存的效率；

 

3、各个CPU都有本地内存NUMA（非一致性内存访问），进一步改善美国服务器CPU访问主存的效率；

 

![如何选择存储协议：InfiniBand vs 光纤通道](https://www.mfisp.com/wp-content/uploads/2023/03/18635-67ftWz-e1697527866311.png)

 

4、store buffer模块改善cache write由于应答延迟而造成的[美国服务器](https://www.mfisp.com/shop/usvmidc)系统写停顿问题；

 

5、invalidate queue模块改善使[美国服务器](https://www.mfisp.com/shop/usvmidc)无效应答的时延，把使无效命令放入queue后就立即发送应答；

 

6、外设DMA支持直接访问主存，改善[美国服务器](https://www.mfisp.com/shop/usvmidc)CPU使用效率。

 

这些[美国服务器](https://www.mfisp.com/shop/usvmidc)硬件体系设计特点也引入很多问题，最大的问题就是cache一致性问题和乱序执行的问题，cache一致性问题由cache一致性协议MESI解决，MESI由硬件保证，对软件来说是透明的。

 

MESI协议保证所有[美国服务器](https://www.mfisp.com/shop/usvmidc)CPU对单个cache line中单个变量修改的顺序保持一致，但不保证不同变量的修改在所有CPU上看到的是相同顺序，这就造成了乱序。不仅如此，乱序的原因还有以下方面：

 

```
store buffer引起的延迟处理，会造成乱序
invalidate queue引起的延迟处理，会造成乱序
编译优化，会造成乱序
分支预测、多流水线等CPU硬件优化技术，会造成乱序
外设DMA，会造成数据乱序
```

 

这种情况造成就连简单的++运算操作的原子性都无法保证，而这些问题必须采用[美国服务器](https://www.mfisp.com/shop/usvmidc)多核并行编程新的技术手段来解决。以下小编就来详细介绍下[美国服务器](https://www.mfisp.com/shop/usvmidc)的多核并行编程技术。

 

**多核并行编程****的****关键技术**

 

**1****、锁技术**

 

[美国服务器](https://www.mfisp.com/shop/usvmidc)Linux kernel提供了多种锁机制，如自旋锁、信号量、互斥量、读写锁、顺序锁等。各种锁的简单比较如下：

 

1）自旋锁，不休眠，无进程上下文切换开销，可以用在[美国服务器](https://www.mfisp.com/shop/usvmidc)中断上下文和临界区小的场合。

 

2）信号量，会休眠，支持美国服务器同时多个并发体进入临界区，可以用在可能休眠或者长的临界区的场合。

 

![](https://www.mfisp.com/wp-content/uploads/thumb/2021/10/fill_w120_h120_g0_mark_6b9525161d6ba7_1_post.webp) 

[![](https://www.mfisp.com/wp-content/uploads/thumb/2021/10/fill_w120_h120_g0_mark_6b9525161d6ba7_1_post.webp)](https://www.mfisp.com/shop/336.html)

## [美国服务器-USC3E31230B](https://www.mfisp.com/shop/336.html)[出售]

 

￥999

 

￥1199

 
 
- 库存：9.9k 
- 已售：121 
- 人气：3.3k

 

3）互斥量，类似与信号量，但只支持[美国服务器](https://www.mfisp.com/shop/usvmidc)同时只有一个并发体进入临界区。

 

4）读写锁，支持读并发，写写/读写间互斥，读会延迟写，对读友好，适用美国服务器读侧重场合。

 

5）顺序锁，支持读并发，写写/读写间互斥，写会延迟读，对写友好，适用[美国服务器](https://www.mfisp.com/shop/usvmidc)写侧重场合。

 

锁技术虽然能有效地提供[美国服务器](https://www.mfisp.com/shop/usvmidc)并行执行下的竞态保护，但锁的并行可扩展性很差，无法充分发挥多核的性能优势。锁的粒度太粗会限制扩展性，粒度太细会导致巨大的系统开销，而且设计难度大，容易造成死锁，以下[美国服务器](https://www.mfisp.com/shop/usvmidc)技术手段或指导原则能解决或减轻这些问题的风险：

 

```
按统一的层次顺序使用锁，解决死锁问题
指数后退，解决活锁/饥饿问题
范围锁，解决锁惊群问题
优先级继承，解决优先级反转问题
```

 

**2****、原子技术**

 

原子技术主要是解决[美国服务器](https://www.mfisp.com/shop/usvmidc)不一致性和乱序执行对原子访问的破坏问题，主要的原子原语有：

 

1）ACCESS_ONECE()：只限制编译器对[美国服务器](https://www.mfisp.com/shop/usvmidc)内存访问的优化。

 

2）barrier()：只限制编译器的乱序优化。

 

3）smb_wmb()：写内存屏障，刷新store buffer，同时限制[美国服务器](https://www.mfisp.com/shop/usvmidc)编译器和CPU的乱序优化。

 

![网络交换机与网络路由器与网络防火墙](https://www.mfisp.com/wp-content/uploads/2023/03/17678-P3nOzB.jpg)

 

4）smb_rmb()：读内存屏障，刷新invalidate queue，同时限制编译器和美国服务器CPU的乱序优化。

 

5）smb_mb()：读写内存屏障，同时刷新store buffer和invalidate queue，同时限制[美国服务器](https://www.mfisp.com/shop/usvmidc)编译器和CPU的乱序优化。

 

6）atomic_inc()/atomic_read()：[美国服务器](https://www.mfisp.com/shop/usvmidc)整型原子操作。

 

**3****、****无锁技术**

 

原子技术是[美国服务器](https://www.mfisp.com/shop/usvmidc)无锁技术中的一种，除此之外无锁技术还包括RCU、Hazard pointer等，这些无锁技术都基于内存屏障实现的：

 

![什么是入侵检测系统？](https://www.mfisp.com/wp-content/uploads/2023/05/20536-8D8qsA.png)

 

1）Hazard pointer主要用于[美国服务器](https://www.mfisp.com/shop/usvmidc)对象的生命周期管理，类似引用计数，但比引用计数有更好的并行可扩展性。

 

2）RCU适用的场景很多，其可以替代：读写锁、引用计数、垃圾回收器、等待事物结束等，而且有更好的并行扩展性。但[美国服务器](https://www.mfisp.com/shop/usvmidc)RCU也有一些不适用的场景，如写侧重、临界区长、临界区内休眠等场景。

 

不过所有的无锁原语也只能解决读端的并行可扩展性问题，写端的并行可扩展性只能通过[美国服务器](https://www.mfisp.com/shop/usvmidc)数据分割技术来解决。

 

**4****、数据分割技术**

 

分割数据结构可以减少共享数据，是解决[美国服务器](https://www.mfisp.com/shop/usvmidc)并行可扩展性的根本办法。对分割友好，即并行友好的数据结构有：

 

```
数组
哈希表
基树/稀疏数组
跳跃列表
```

 

使用这些便于分割的数据结构，有利于通过数据分割来改善[美国服务器](https://www.mfisp.com/shop/usvmidc)并行可扩展性。除了使用合适的数据结构外，合理的分割指导规则也很重要：

 

```
读写分割：把以读为主的数据与以写为主的数据分开
路径分割：按独立的代码执行路径来分割数据
专项分割：把经常更新的数据绑定到指定的CPU/线程中
所有权分割：按CPU/线程个数把数据分割到per-cpu/per-thread中
```

 

以上这些就是关于[美国服务器](https://www.mfisp.com/shop/usvmidc)多核并行编程的内容，基本上涵盖了Linux kernel中所有的并发编程关键技术。当然[美国服务器](https://www.mfisp.com/shop/usvmidc)并行编程还有很多其他技术没有应用到Linux kernel中的，如无副作用的并行函数式编程技术、消息传递、MapReduce等等。

 

现在[梦飞科技](https://www.mfisp.com)合作的[美国VM机房](https://www.mfisp.com/shop/usvmidc)的[美国服务器](https://www.mfisp.com/shop/usvmidc)所有配置都免费赠送防御值 ，可以有效防护网站的安全，以下是部分配置介绍：

   

| CPU | 内存 | 硬盘 | 带宽 | IP | 价格 | 防御 |
|---|---|---|---|---|---|---|
| E3-1230v3 | 16GB | 500GB SSD | 1G无限流量 | 1个IP | 900/月 | 免费赠送1800Gbps DDoS防御 |
| E3-1270v2 | 32GB | 500GB SSD | 1G无限流量 | 1个IP | 1250/月 | 免费赠送1800Gbps DDoS防御 |
| E3-1275v5 | 32GB | 500GB SSD | 1G无限流量 | 1个IP | 1350/月 | 免费赠送1800Gbps DDoS防御 |
| Dual E5-2630L | 32GB | 500GB SSD | 1G无限流量 | 1个IP | 1450/月 | 免费赠送1800Gbps DDoS防御 |

   

[梦飞科技](https://www.mfisp.com)已与全球多个国家的顶级数据中心达成战略合作关系，为互联网外贸行业、金融行业、IOT行业、游戏行业、直播行业、电商行业等企业客户等提供一站式安全解决方案。持续关注[梦飞科技官网](https://www.mfisp.com)，获取更多IDC资讯！

 

![什么是点对点与专用游戏服务器？](https://www.mfisp.com/wp-content/uploads/2022/11/12110-Iup8hW.png)

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
