Linux_libco协程库剖析

非对称协程(asymmetric coroutines):是跟一个特定的调用者绑定的,协程让出 CPU 时,只能让回给原调用者。那到底是什么东西“不对称”呢?其实,非对称在于程序控制流转移到被调协程时使用的是 call/resume 操作,而当被调协程让出 CPU时使用的却是 return/yie...

2019-08-22 13:42:15

阅读数 36

评论数 0

Linux_协程、libco

协程:协程,又被称为用户级线程,是在应用层被调度,可以减少因为调用系统调用而阻塞的线程切换的时间 基本原理:协程实质上可以看成是子程序、函数。一个线程上面可以运行多个协程,但是同一时间只能运行一个协程,协程在线程上的切换,是由于遇到阻塞的操作,或者主动让出线程使用权。比如,有10个协程,当前线程...

2019-08-20 19:12:11

阅读数 44

评论数 0

求一个二叉树中两个结点的最大距离

求一个二叉树中两个结点的最大距离分为两个情况: 1: 最大距离为从左子树的最深节点,通过根节点,再到右子树的最深节点 2: 或路径不穿过根节点,而是左子树或右子树的最大距离路径 template<class T> struct BinaryTreeNode { Bin...

2019-08-20 13:15:56

阅读数 40

评论数 0

C++_智能指针、强转指针

智能指针: C++ 98 auto_ptr C++11 unique_ptr shared_ptr weak_ptr auto_ptr:所有权唯一,新的智能指针取消旧智能指针所有权 ,赋值或者拷贝导致智能指针提前失效 (一个较为早期的版本(日常是不用的)解决拷贝构造(多次释放)的方法是...

2019-08-19 16:05:39

阅读数 64

评论数 0

C++_封装 、继承 、多态

C++的三大特征:封装 、继承 、多态。 封装突破了C语言函数的概念,可以隐藏实现细节,使得代码模块化,继承可以扩展已存在的模块,它们目的都是为了:代码重用。而多态是为了实现另一个目的:接口重用。 封装:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得...

2019-08-19 15:48:15

阅读数 80

评论数 0

C++_内存池

默认内存管理的不足: malloc/free 和 new/delete 在堆上申请和释放内存都有一定的额外开销。开销来自维护 内存空闲块表。malloc和new 申请堆内存时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法找到合适大小的空闲内存块。如果该空闲内存块过大,还需要切割成已分配的...

2019-08-18 17:24:39

阅读数 62

评论数 0

C++_浅拷贝、深拷贝、写时拷贝

浅拷贝:编译器只是直接将指针的值拷贝过来,结果多个对象共用了一块内存,当一个对象调用了析构函数将这块内存释放掉之后,另一些对象不知道这块空间已经还给了系统,再次调用析构函数进行释放时发现已经释放了,就会造成程序崩溃。在类的成员中有指针类型的成员变量的时候,必须对其写出显式的拷贝构造函数和赋值运算符...

2019-08-18 16:34:17

阅读数 68

评论数 0

C++_运算符重载

运算符重载:使自定义类型满足和内置类型相同的运算功能 C++语言支持函数重载,重载的底层实现是,C++编译器编译函数符号的时候,是根据函数名和形参的个数,类型来共同决定的,因此如果一组函数只是函数名相同,而参数列表不同的话,那么它们生成的符号也是不同的,就不会产生冲突了,编译过程中,函数生成的符号...

2019-08-16 19:11:54

阅读数 55

评论数 0

const、static

const 有如下特点以及应用场景: 在 C++中 const 是用来定义常量的,不能作为左值被修改,而且必须初始化。const 常量的初始值如果是一个明确的值,那么常量在编译期会被常量的初始值替换。在 C++中修饰的量也可以是常变量(和 C 语言相同),此时它只是不能作为左值,其他性质和普通变量...

2019-08-16 18:37:51

阅读数 54

评论数 0

数据库基础1

一、存储引擎 二、索引 三、事务 一、存储引擎:一种文件的存储机制 MySQL的默认存储引擎:V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB 查看默认存储引擎:show variables like '%engine%'MyISAM: 不支持外键,不支持事务,支持...

2019-08-16 12:23:47

阅读数 51

评论数 0

数据库基础2_SQL基础操作

SQL基础操作 DDL 数据定义语言:create drop alter show 一:库 创建库:creat database [if not exists]name; db:数据库 删除库:drop databsae [if exists]name; ...

2019-08-16 11:58:33

阅读数 60

评论数 0

全排列、子集问题

输入一个字符串,打印出该字符串中字符的所有排序,例如输入字符串abc,则打印出字符串a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab、cba//解法一:经典的解法 #include<iostream> #include<string...

2019-08-14 19:16:42

阅读数 64

评论数 0

给定数组元素,插入(替换)一个元素,使得它左边的值小于等于它,右边的值大于它,求位置?

给定数组元素,插入一个元素,使得它左边的值小于等于它,右边的值大于它,求这个元素插入的位置: //用vector初始化数组元素(随机值)void Init_Vector(vector<int> &ivec) { for(int i = 0;i&...

2019-08-14 14:25:06

阅读数 65

评论数 0

BST

BST(Binary Search Tree):二叉查找树,也叫二叉搜索树,二叉排序树,其目的是为了提高查找的效率,其查找在平均和最坏的情况下都是logn级别,接近二分查找 BST性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大...

2019-08-12 21:12:59

阅读数 57

评论数 0

二叉树_线索化二叉树

#include<assert.h> #include<iostream> #include<vector> #include<stack> #include<queue&...

2019-08-11 20:06:27

阅读数 56

评论数 0

union_整形->IP(点分十进制)

解法一:普通处理 #include<stdio.h> void PrintIP(unsigned int ip) { int i = 0; int a =0; for(int i = 0;i<4;++i) { a = ip &...

2019-08-11 17:18:20

阅读数 76

评论数 0

C++_文件传输2_客户端与服务器端编程

#define UPFILE 1 #define DOWNFILE 2 #define COMMAND 3 typedef struct Command { long type; char text[128]; }S_Command; class FileTrans { public: ...

2019-08-11 13:17:45

阅读数 62

评论数 0

Linux_IO复用

I/O模型:阻塞I/O、非阻塞I/O、I/O复用、信号I/O、异步I/O I/O复用:一个单进程、单线程的服务器程序同时监听多个文件描述符上是否有关注的事件发生,如果某些文件描述符上有事件发生,则程序接着处理有事件发生的文件描述符,没有事件发生的文件描述符则不予理会,这样就可以极大的提高程序的性...

2019-08-10 22:35:49

阅读数 61

评论数 0

Linux_多进程、多线程、线程池、进程池

单进程、单线程编程:这样的服务器程序同一时刻只能处理一个客户端连接,可以和多个客户端串行交互 int main() { int listenfd = socket(); int res = bind(); res = listen(); while(1) {...

2019-08-10 20:38:43

阅读数 61

评论数 0

Linux_内存、虚拟内存

一、内存的管理方案分区:固定分区:操作系统启动时将内存分配完成 大小相等的固定分区:将内存分配成大小相等的区块,会产生内部碎片 放置策略:为每一个区块维护一给队列,为整体维护一个等待队列 大小不等的固定分区:将内存分配...

2019-08-10 15:28:45

阅读数 94

评论数 0

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