三、多处理器编程

1.多处理器编程入门

在多个CPU核心下,多线程的好处是显而易见的,不然多个CPU核心只跑一个线程其他的核心就都浪费了。
即便不考虑多核心,在单核下,多线程也是有意义的,因为在一些操作,比如IO操作阻塞的时候,是不需要CPU参与的,这时候CPU就可以另开一个线程去做别的事情,等待IO操作完成再回到之前的线程继续执行即可。
同一个线程组内线程间共享虚拟内存

思考:如果线程非常非常多,会发生什么情况?

CPU会在N多线程之间调度,CPU会类似,消耗大量的CPU资源;每条线程被调度执行的频次会较低(线程的执行效率减低)。一般开到3-5条线程。
在这里插入图片描述
多任务操作系统,每隔一小段时间从一个进程切换到另一个进程,因此看起来进程是同时执行。
操作系统并发的来源,是系统调用。也就是进程虽然地址空间被隔离,但执行过程不是完全没有影响,而是进程在执行中,会通过系统调用访问操作系统的API,而操作系统的对象是共享的。例如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

foo的代码共享,全局变量x共享。
除了代码和全局变量,每个线程的堆栈和寄存器都是他们独享的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
threads.h

#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <pthread.h>

struct thread{
   
	int id;				//线程号
	pthread_t thread;	//pthread线程
	void (*entry)(int);	//入口地址
	struct thread *next;//链表
};

struct thread *threads;
void (*join_fn)();


// ============  Basics  =============

__attribute__((destructor)) static void join_all(){
   
	for (struct thread *next; threads; threads = next){
   
		pthread_join(threads->thread,NULL);
		next = threads->next;
		free(threads);
	}
	join_fn ? join_fn() : (void)0;
}

static inline void *entry_all(void *arg){
   
	struct thread *thread 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一. 并发与并行的区别? ........................................................................................................................... 1 1.1 串行 .................................................................................................................................................. 1 1.2 并发 .................................................................................................................................................. 1 1.3 并行 .................................................................................................................................................. 1 1.4 多核编程的难点 ............................................................................................................................... 2 二. 多核体系架构 ...................................................................................................................................... 3 2.1 多核处理器定义 ............................................................................................................................... 3 2.2 多核发展趋势 .................................................................................................................................. 3 2.3 一个多核处理器架构例子 ............................................................................................................... 5 2.4 LINUX 线程核绑定 .............................................................................................................................. 6 2.4.1 核亲和性绑定 ........................................................................................................................... 6 2.4.2 资源控制 cgroup ...................................................................................................................... 8 三. 内存模型 .............................................................................................................................................. 8 3.1 操作原子性 ...................................................................................................................................... 9 3.1.1 原子性的3种保证机制 ........................................................................................................... 9 3.1.2 硬件原子操作 ........................................................................................................................... 9 3.1.3 总线锁-原子操作原语 ............................................................................................................ 12 3.2 缓存一致性 .................................................................................................................................... 16 3.2.1 定义 ........................................................................................................................................ 16 3.2.2 CC协议 .................................................................................................................................... 17 3.2.3 伪共享 .................................................................................................................................... 21 3.3 顺序一致性 .................................................................................................................................... 24 3.3.1 定义 ........................................................................................................................................ 24 3.3.2 几种顺序约束 ......................................................................................................................... 25 3.3.3 乱序执行和内存屏障 ............................................................................................................. 28 四. 并发级别 ............................................................................................................................................ 31 4.1 WAIT-FREEDOM 无等待并发 .............................................................................................................. 32 4.2 LOCK-FREEDOM 无锁并发 ................................................................................................................... 32 4.3 OBSTRUCTION-FREEDOM 无阻塞并发 .................................................................................................. 33 4.4 BLOCKING ALGOITHMS 阻塞并发 .......................................................................................................... 33 五. 锁 ....................................................................................................................................................... 34 5.1 信号量 ............................................................................................................................................ 34 5.2 自旋锁 ............................................................................................................................................ 35 5.3 读写锁 ............................................................................................................................................ 35 5.4 顺序锁 ............................................................................................................................................ 37 5.5 RCU .................................................................................................................................................. 38 六. 无锁编程 ............................................................................................................................................ 38 6.1 定义 ................................................................................................................................................ 39 七. 并发数据结构、开源库 ..................................................................................................................... 41 7.1 一些开源的并发库 ......................................................................................................................... 41 7.2 一次无锁哈希表跟基于锁的哈希表性能对比测试 ..................................................................... 41 7.2.1 测试平台 ................................................................................................................................ 41 7.2.2 测试过程 ................................................................................................................................ 42 7.2.3 哈希算法 ................................................................................................................................ 43 7.2.4 测试结果 ................................................................................................................................ 44 八. 多核工程实践 .................................................................................................................................... 44 8.1 网络设备 :INTEL DPDK .................................................................................................................. 44 8.2 网络游戏 ........................................................................................................................................ 44 8.3 手机开发 ........................................................................................................................................ 45 九. 参考 ................................................................................................................................................... 45

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值