自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (1)
  • 收藏
  • 关注

原创 【论文分享】Non-Blocking Writes to Files(操作系统层面优化write()方法的时间开销)

Non-blocking Writes to Files (FAST '15)Daniel Campello and Hector Lopez, Florida International University; Luis Useche, Google Inc.; Ricardo Koller, IBM T. J. Watson Research Center; Raju Rangaswami, Florida International University在现有的操作系统体系结构下,对文件进行.

2022-05-26 20:35:39 245

原创 【C++】自定义未处理异常抛出后,所调用的中止函数

在C++中,每当有异常出现时,都会按照使用try-catch块定义的行为来处理。然而,经常有这样的情况:一个异常被抛出,但没有被捕获,因为异常处理子系统没有找到与之匹配的捕获块。在这种情况下,就会发生以下一系列的动作:异常处理子系统调用函数: unexpected()。这个函数由默认的C++库提供,定义了出现未捕获的异常时的行为。默认情况下,unexpected调用terminate()。terminate函数定义了进程终止时要执行的动作。默认情况下,它调用abort()。进程被终止。

2022-05-25 17:23:23 573

原创 C/C++中的switch语句优化效率的两种方式

简介许多编程语言,如C/C++、C#、Java和Pascal,都提供了switch语句,让我们实现选择逻辑。在某些情况下,它是if-then-else的一个很好的替代品,使代码更清晰、更易读。在实践中使用switch时,你可能想知道。switch块在运行时是如何执行的?对于一长串的条件,它的运行速度是否比if-then-else快?对于n个条件,switch的时间复杂度是多少?C/C++标准定义了语言元素的规范,但它并没有说如何实现switch语句。只要符合标准,每个厂商都可以自由

2022-05-24 16:34:06 3314 2

原创 从零开始设计键值数据库(KEY-VALUE STORE)

CHAPTER 6: DESIGN A KEY-VALUE STORE本文主要参考 System Design Interview: An Insider’s Guide(CHAPTER 6)键值存储(key-value store),也被称为键值数据库(key-value database),是一个非关系型数据库。每一个独特的标识符都被存储为一个带有相关值的键。这种数据配对被称为 "键-值 "对。 在一个键值对中,键必须是唯一的,与键相关的值可以通过键来访问。键可以是纯文本或散列值。出于性能方面的考虑

2022-05-23 14:15:18 4962

原创 【C++11】多线程并行化快速排序的实现

并行化可以优化许多算法,前提是并行化的任务之间不会产生冲突。快速排序的核心逻辑为分治,通过一次遍历,使得区间分成了两个子区间,其中一个子区间的元素恒小于等于另一个区间的元素,再用同样的方法分别处理这两个子区间。可以发现,这两个子区间不重叠,并且后续的操作都是在一个区间内继续完成,不会跨区间,因此满足了并行化的条件。通常的一种用多线程来解决问题的方式是使用线程池,将需要完成的操作细化成任务,传入线程池,空闲的线程会去完成这些任务。对于并行化快排来说,对区间[p, q]进行partition操作分为两个

2022-05-16 20:24:51 2114

原创 gcc利用likely()优化分支跳转结构

在linux编程中,有可能会在条件判断中见到likely(expr)和unlikely(expr)的用法,它们实际上是宏定义:#define likely(x) __builtin_expect((x), 1)#define unlikely(x) __builtin_expect((x), 0)是在告诉编译器,这个表达式为true的概率是大还是小,这样能指导编译器在处理分支判断的跳转时,更好地利用程序的空间局部性(CPU对指令的cache)。下面举个例子来说明编译器具体是怎么优化likely

2022-05-15 17:19:26 573

原创 [Python] [Linux] 统计进程组中所有的进程号

linux中进程呈现树状结构,一个进程可能有若干个子进程,最多有一个父进程。在文件/proc/$pid/task/$pid/children中存放了该进程的子进程号,用空格分隔。ljq@ljq1:/home/fujx/controller$ cat /proc/1/task/1/children 313 337 352 750 906 920 928 1011 1015 1018 1025 1078 1226 1274 1360 1432 1489 1523 1935 2032 2034 2075 24

2022-05-09 19:15:42 660

翻译 高效使用内存的双向链表

A Memory-Efficient Doubly Linked Listhttps://www.linuxjournal.com/article/6828在追求小型设备的成本效益的过程中,制造商往往需要考虑减少内存的大小。一种选择是为我们日常实现的抽象数据类型(abstract data types, ADTs)寻找替代实现。一个这样的ADT就是双链表结构。在这篇文章中,我介绍了双链表ADT的传统实现和替代实现,包括插入、遍历和删除操作。我还提供了每种实现的时间和内存测量,以比较其优点和缺点。替.

2022-04-12 13:56:38 325 1

原创 GCC编译器高效利用cache的原理和参数

如果大家对文章内容有疑问或建议,欢迎评论区留言,我们可以一起讨论,共同提高转载请标明原作者:https://blog.csdn.net/qq_36622751GCC高效利用cache的方法cache简介cache作为承接CPU计算单元和内存的重要通道,能够避免cpu频繁进行效率不高的读写内存操作。然后由于成本和物理空间的关系,cache的大小不能做的很大,差不多是内存千分之一的容量。如何高效利用cache就成为了一个重要的任务。局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所.

2022-04-11 10:43:00 1299

原创 【C/C++】空间换时间,使用函数调用的方式间接对除法操作进行优化

【C/C++】空间换时间,使用函数调用的方式间接对除法操作进行优化最近用godbolt看汇编代码时,发现对整型常量作为除数时,编译器会把除法操作优化成乘法与移位操作,证明见Labor of Division。之后搜了一下,发现除法操作的耗时相当的大。有一篇博文放了某个特定处理器执行不同指令的延时核吞吐量的数据指令的延时与吞吐量 Instruction latency and throughput延时(latency)是指一条指令从开始执行到执行结果就绪(可以被另一条指令使用)所花费的时间,以时钟

2022-04-07 20:12:37 749 1

原创 使用 -D_GLIBCXX_PARALLEL -fopenmp 开启并行STL之旅

最近在看现代C++白皮书,看到C++17引入了并行STL。8.5 并行 STL从长远来看,并行算法的使用将是非常重要的,因为从用户角度看,没有什么比只说“请执行这个算法”更简单的了。从实现者的角度来看,算法中有一套特定接口而没有对算法的串行约束将是一个机会。C++17 只迈出了一小步,但这远比没有开始好得多,因为它指明了方向。不出意外,委员会中有一些反对的声音,大多数来自于希望为专家级用户提供复杂接口的人。有些人对这样简单的一个方案是否可行表示严重怀疑,并主张推迟这一方案。基本的想法是,为每个标准库

2022-04-05 22:46:14 1293 3

原创 使用B+树优化LSM树的Tiering merge策略的读取速度

本博文主要内容为自己对一篇论文的理解,论文将LSM树和B+Tree这两种在数据存储中最为经典高效的数据结构进行结合,使用B+树优化LSM树的Tiering merge策略的读取速度。实验结果表明,所设计的数据结构和策略可以在与tiering merge策略达到相同抑制写放大的水平的情况下,提高其读取的吞吐量。

2022-04-03 14:24:01 934

原创 【共享内存】mmap、shm和MappedByteBuffer性能比较

引子由于近期需要写一个java程序和一个已有的c程序(AFL)进行本地通信,使用udp发送数据感觉效率不是很高。另外afl本身使用shm共享物理内存获得待测试子程序的执行路径信息,而java程序共享内存只有文件映射内存的方式,类似与c里面的mmap。因此考虑将AFL的共享内存机制改为mmap,本文将测试linux c 中 mmap、shm和java nio MappedByteBuffer性能,来评估修改AFL共享内存方式是否会影响其本身的性能。共享内存背景mmap与shm内存映射函数mmap, 它

2021-11-09 11:18:51 2229

原创 【C/C++】由指针强制转换看结构体和类的内存布局

【C/C++】由指针强制转换看结构体和类的内存布局引子最近在使用Linux C进行网络编程,发现用户都是对 struct sockaddr_in 这个结构体进行操作,但是调用库函数时都是强制转换为 struct sockaddr 作为参数。一、sockaddrsockaddr在头文件#include <sys/socket.h>中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下:struct sockaddr { sa_family_t

2021-09-12 21:16:39 2881

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除