
性能优化
yeshahayes
这个作者很懒,什么都没留下…
展开
-
程序性能优化手段-实际代码案例1
在前两篇中,分别介绍了通过数据分片和避免伪共享两种方法来增加程序性能。现在来看一个实际的代码案例。 在Windows内核中,有一些带CacheAware的函数,包括RundownProtection和PushLock系列的函数。顾名思义,这些函数是进行了Cache友好的优化,其中包括了对多核进行数据分片以及CacheLine大小对齐的内存块。 我们来看一下这些函数是如何工作的吧,这...原创 2018-03-30 07:34:21 · 1264 阅读 · 0 评论 -
程序性能优化手段-共享数据的拆分
很多情况下,多个线程需要对一块内存进行大量的写操作,肯定是需要同步机制的支持的。即使是简单的加减法也需要原子锁的同步支持,其他情况下可能还需要其他更重量级锁的支持。 除此之外,不同的CPU对同一块内存的写操作也会造成CPU之间的缓存同步,这会大大加重总线负担从而影响程序的效率。详细内容可以参考这篇 这种情况下,可以对这块共享内存进行拆分,既每一个CPU都维护自己的一块内存,这个内存...原创 2018-03-27 22:04:06 · 282 阅读 · 0 评论 -
Win32下的非侵入式协程实现
关于协程和libco 本项目Github地址 协程实现异步其实就是用同步的业务逻辑代码,但内部却执行异步等待并进行调度,既保证的代码的可读性,又能实现异步的高并发。在Windows编程中,往往会有大量阻塞的IO操作,比如这段代码: CHAR buf[4096]; DWORD Size; LONG Offset = 0; SIZE_T CSize; ...原创 2018-04-15 20:54:06 · 420 阅读 · 0 评论 -
程序性能优化手段-避免伪共享
当分配数个变量或者定义数个全局变量时,这些不同用途的变量很可能会被分配到很近的地址空间上,会导致CPU在读取时,他们会处在同一个Cache line中。如果这时一个CPU上的线程在操作其中一个变量,而另一个CPU上的线程在读另一个变量,将导致读线程CPU不得不和写线程CPU进行一次缓存同步后才能将数据读取出来,这会导致增加缓存开销和总线开销,降低程序效率。这就是并发编程中常碰到的False s...原创 2018-03-28 21:47:24 · 741 阅读 · 0 评论