主页

操作系统

进程、线程、协程 进程是操作系统资源分配的最小单位,线程是cpu调度的最小单位。 进程有独立的系统资源,而同一进程内的线程共享进程的大部分系统资源,包括堆、代码段、数据段,每个线程只拥有一些在运行中必不可少的私有属性,比如tcb,线程Id,栈、寄存器。 一个进程崩溃,不会对其他进程产生影响;而一个线程崩溃,会让同一进程内的其他线程也死掉。 进程在创建、切换和销毁时开销比较大,而线程比较小。进程创建的时候需要分配系统资源,而销毁的的时候需要释放系统资源。进程切换需要分两步:切换页目录、刷新TLB以使用新的地址空间;切换内核栈和硬件上下文(寄存器);而同一进程的线程间逻辑地址空间是一样的,不需要切换页目录、刷新TLB。 进程间通信比较复杂,而同一进程的线程由于共享代...

阅读更多

Redis

1、数据结构 1.1 SDS:Simple Dynamic Strings typedef char *sds; /* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS strings. */ struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ char buf[]; }; struct __a...

阅读更多

ubuntu 18.04 源更换

cp /etc/apt/sources.list /etc/apt/sources.list.bak cd /etc/apt vim sources.list 1、阿里源文件内容如下: deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multi...

阅读更多

算法框架模版

BFS算法框架 // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 核心数据结构 Set<Node> visited; // 避免走回头路 q.offer(start); // 将起点加入队列 visited.add(start); int step = 0; // 记录扩散的步数 while (q not empty) { int sz = q.size(); /* 将当前队列中的所有节点向四周扩散 */ for (int i = 0; i &l...

阅读更多

OpenMP

原文链接:https://hpc.llnl.gov/tuts/openMP/ 1、摘要 OpenMP 是一个应用程序接口(API),由一组主要的计算机硬件和软件供应商联合定义。OpenMP 为共享内存并行应用程序的开发人员提供了一个可移植的、可伸缩的模型。该API在多种体系结构上支持 C/C++ 和 Fortran。本教程涵盖了 OpenMP 3.1 的大部分主要特性,包括用于指定并行区域、工作共享、同步和数据环境的各种构造和指令。还将讨论运行时库函数和环境变量。本教程包括 C 和 Fortran 示例代码以及一个实验练习。 水平/先决条件:本教程非常适合那些刚接触 OpenMP 并行编程的人。需要对 C 语言或 Fortran 语言中的并行编程有基本的了解。对于那些通常不熟悉并行...

阅读更多

C++11

C++11线程 用函数方式起一个线程 #include <thread> void ThreadFunc() { std::cout << "函数线程开始" << std::endl; std::cout << "函数线程结束" << std::endl; } int main() { std::thread t(ThreadFunc); // 创建一个线程并开始执行 t.join(); //主线程等待当前线程执行完成再退出 //t.detach(); //主线程和当前线程一起执行 std::cout << "main 函数" <<...

阅读更多