C++学习
文章平均质量分 82
东东儿
苦海无涯肯争渡,人生当见一惊鸿
展开
-
C++11线程间同步方式
1.多线程的并发问题线程间为什么需要同步?直接来看一个例子:int a = 0;void foo(){ for (int i = 0; i < 10000000; ++i) { a += 1; }}int main(){ clock_t start, end; start = clock(); thread t1(foo); thread t2(foo); ...原创 2020-02-11 17:57:36 · 3775 阅读 · 1 评论 -
带有共享栈缓存的协程库
1.什么是协程在多线程和多进程的程序中,线程和进程的调度都是由操作系统完成的,用户没有办法确定其调度和执行的先后顺序,且在每次调度时需要转换到内核态,调度完成后再转回用户态,这是非常费时间的,更不用说多进程程序的调度还可能会造成缓存和TLB失效。协程(Coroutine)又叫作微线程,是一种比线程更加细粒度的调度单位。它的调度是完全由用户来决定的,换言之,不会在调度中陷入内核态,且什么时候进行...原创 2019-12-09 10:51:39 · 565 阅读 · 0 评论 -
一致性哈希原理及C++实现
一致性哈希通过哈希环实现KEY到对应Node的映射:具体算法过程为:先构造一个长为2^32的整数环,根据节点的Hash值将Node(服务器)分配到环的对应位置上,然后计算需要查询数据的键值KEY的哈希值,然后在哈希环上顺时针查询离这个KEY最近的服务器节点,完成映射。哈希环能够很好的进行负载均衡,而且具有很好的扩展性,如果一个服务器宕机或者需要添加新的服务器,大部分键值以前的映射关系不会改变...原创 2019-11-19 23:07:09 · 1382 阅读 · 0 评论 -
静态链接——重定位
在几年前第一次学C语言时,按照书上给的示例,在VC6.0中写了HelloWorld程序,然后按照书上的教程,进行编译,链接,最后执行程序,就能在输出窗口上看到Helloworld。对于一个用IDE写代码的人来说,代码需要编译链接才能生成可执行文件这是一个尝试,那么编译链接到底做了一个什么样的事情呢?因为我们写到C语言代码是高级程序语言,计算机是没法解析执行的,计算机能读懂的只能是二进制代码,编...原创 2019-11-16 17:28:11 · 1667 阅读 · 0 评论 -
"+="、"+"和append三种字符串拼接方法效率比较
常用的字符串拼接方式有三种,直接用"+“拼接后在赋给对应值,一个是”+=",还有一种是string中的append方法,那么这三种方法有什么区别,效率谁高谁低?先说结论:"+=“和append方法效率远远高于”+",因为"+“在每次拼接后会在内存中创建一个新对象,然后将拼接后的字符串赋值给新对象,频繁的创建对象与拷贝消耗了大量时间。而”+="和append每次直接在原字符串进行拼接,直到字符串c...原创 2019-11-12 20:19:16 · 4627 阅读 · 1 评论