linux page
REF struct page结构体 Minimizing the use of tail pages An introduction to compound pages Cramming more into struct page Memory_management-struct_page
REF struct page结构体 Minimizing the use of tail pages An introduction to compound pages Cramming more into struct page Memory_management-struct_page
Page cache Linux的Page Cache(页面缓存)是内核中的一种机制,用于缓存从磁盘读取的文件内容,以及缓存即将写入磁盘的数据。 为什么使用 1 快 cpu其实没法直接操作磁盘数据,其实只能经过一次内存之后再操作,这中间是有copy的 这种缓存机制可以显著提高文件访问的速度,因为访问内存中的数据比访问磁盘上的数据要快得多。 type ...
简单的记录一下gcc的优化选项,以及一些细节。 正常情况下,能选择开/关的编译器优化,只有有符号的哪些 你可以通过 gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | gre...
REF Asymmetric Transfer Coroutine, 异步,同步,async, await
atomic在C++中其实被分成两个部分,第一个是原子操作,第二个是内存序屏障。 原子操作,是指一个操作要么全部执行,要么全部不执行,不会被中断。原子操作是一种线程安全的操作,不需要额外的锁来保护。 内存序屏障,是指在多线程并发编程中,为了保证内存序列不击穿,需要在一些地方插入内存序屏障,来保证内存序列的一致性。 如果要完全理解内存屏障,必然要从cache line说起 为...
c++20里还有一些比较轻量的同步原语 semaphore latch + barrier 1. semaphore, 信号量 信号量是一个同步对象,用于保持在0至指定最大值之间的一个计数值。 当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一; 当线程完成一次对semaphore对象的释放(release)时,计数值加一。 当计数值为0,则线...
在多线程编程中,各个任务通常需要通过同步操作进行相互协调和等待,以确保数据的一致性和正确性 在c++中,你能想到的同步原语有: 条件变量配合mutex future/promise/packaged_task c++20的latch/barrier 1. spin等待,不让出线程 bool flag = false; std::mutex m; void wait_...
线程安全相关的同步原语,主要解决表达式冲突问题,即多个线程同时访问共享数据,导致数据不一致的问题。 注意有三种情况是例外的 同线程处理 atomic操作 memory barrier下的内存序已经能确认的操作 1. mutex mutex是一种用来保护临界区的同步原语,其相当于实现了一个公共的“标志位”。它可以处于锁定(locked)状态,也可以处于解锁(unlock...
stringstream的几种用法 1. 字符串转数字 #include <iostream> #include <sstream> int main() { std::string str = "123"; int num; std::stringstream ss; ss << str; ss >> num; ...
c++11的可变参函数模板 1. 可变参函数模板 template<typename... T> void Print(T... args) { // ... } 在typename后面带上...表示这是一个可变参模板函数,可以接受任意数量的参数。 2. 展开方式 展开方式其实在11,17乃至之后都有不同的一些用法。 2.1 递归展开 template<...