Browse Source

intial repo

Change-Id: I9a8d736690c0f97909a0a2f2d457affcb71f5c0a
zhangyuanlong 3 years ago
commit
b6b8725df1
100 changed files with 108344 additions and 0 deletions
  1. 2626 0
      articles/C++必知必会的知识点/C++17结构化绑定.html
  2. 2749 0
      articles/C++必知必会的知识点/C++必须掌握的pimpl惯用法.html
  3. 2500 0
      articles/C++必知必会的知识点/index.html
  4. 2742 0
      articles/C++必知必会的知识点/不定参数函数实现var_arg系列的宏.html
  5. 2432 0
      articles/C++必知必会的知识点/你一定要搞明白的C函数调用方式与栈原理.html
  6. 2501 0
      articles/C++必知必会的知识点/利用cmake工具生成VisualStudio工程文件.html
  7. 2497 0
      articles/C++必知必会的知识点/如何使用VisualStudio管理和阅读开源项目代码.html
  8. 2432 0
      articles/C++必知必会的知识点/如何成为一名合格的CC++开发者?.html
  9. 2432 0
      articles/C++必知必会的知识点/深入理解CC++中的指针.html
  10. 2525 0
      articles/C++必知必会的知识点/用VisualStudio调试Linux程序.html
  11. 2433 0
      articles/C++必知必会的知识点/详解C++11中的智能指针.html
  12. 2617 0
      articles/Memcached源码分析/00服务器资源调整.html
  13. 2587 0
      articles/Memcached源码分析/01初始化参数解析.html
  14. 2832 0
      articles/Memcached源码分析/02网络监听的建立.html
  15. 2702 0
      articles/Memcached源码分析/03网络连接建立.html
  16. 2701 0
      articles/Memcached源码分析/04内存初始化.html
  17. 2801 0
      articles/Memcached源码分析/05资源初始化.html
  18. 2640 0
      articles/Memcached源码分析/06get过程.html
  19. 2514 0
      articles/Memcached源码分析/07cas属性.html
  20. 2527 0
      articles/Memcached源码分析/08内存池.html
  21. 2586 0
      articles/Memcached源码分析/09连接队列.html
  22. 2523 0
      articles/Memcached源码分析/10Hash表操作.html
  23. 59 0
      articles/Memcached源码分析/11LRU操作.md
  24. 2657 0
      articles/Memcached源码分析/12set操作.html
  25. 2657 0
      articles/Memcached源码分析/13do_item_alloc操作.html
  26. 2502 0
      articles/Memcached源码分析/14item结构.html
  27. 2619 0
      articles/Memcached源码分析/15Hash表扩容.html
  28. 2613 0
      articles/Memcached源码分析/16线程交互.html
  29. 2940 0
      articles/Memcached源码分析/17状态机.html
  30. 2515 0
      articles/Memcached源码分析/index.html
  31. 2486 0
      articles/TeamTalk源码解析/01TeamTalk介绍.html
  32. 2616 0
      articles/TeamTalk源码解析/02服务器端的程序的编译与部署.html
  33. 3207 0
      articles/TeamTalk源码解析/03服务器端的程序架构介绍.html
  34. 2432 0
      articles/TeamTalk源码解析/04服务器端db_proxy_server源码分析.html
  35. 2868 0
      articles/TeamTalk源码解析/05服务器端msg_server源码分析.html
  36. 2725 0
      articles/TeamTalk源码解析/06服务器端login_server源码分析.html
  37. 2811 0
      articles/TeamTalk源码解析/07服务器端msfs源码分析.html
  38. 3701 0
      articles/TeamTalk源码解析/08服务器端file_server源码分析.html
  39. 2573 0
      articles/TeamTalk源码解析/09服务器端route_server源码分析.html
  40. 2507 0
      articles/TeamTalk源码解析/10开放一个TeamTalk测试服务器地址和几个测试账号.html
  41. 2455 0
      articles/TeamTalk源码解析/11pc客户端源码分析.html
  42. 2502 0
      articles/TeamTalk源码解析/index.html
  43. BIN
      articles/imgs/12306-1.webp
  44. BIN
      articles/imgs/12306-10.webp
  45. BIN
      articles/imgs/12306-11.webp
  46. BIN
      articles/imgs/12306-12.jpeg
  47. BIN
      articles/imgs/12306-13.webp
  48. BIN
      articles/imgs/12306-14.webp
  49. BIN
      articles/imgs/12306-15.jpeg
  50. BIN
      articles/imgs/12306-2.webp
  51. BIN
      articles/imgs/12306-3.webp
  52. BIN
      articles/imgs/12306-4.webp
  53. BIN
      articles/imgs/12306-5.webp
  54. BIN
      articles/imgs/12306-6.webp
  55. BIN
      articles/imgs/12306-7.webp
  56. BIN
      articles/imgs/12306-8.webp
  57. BIN
      articles/imgs/12306-9.webp
  58. BIN
      articles/imgs/atomic1.webp
  59. BIN
      articles/imgs/bz1.png
  60. BIN
      articles/imgs/bz2.webp
  61. BIN
      articles/imgs/cmake1.png
  62. BIN
      articles/imgs/cmake2.png
  63. BIN
      articles/imgs/cmake3.png
  64. BIN
      articles/imgs/cmake4.png
  65. BIN
      articles/imgs/connect1.png
  66. BIN
      articles/imgs/connect10.webp
  67. BIN
      articles/imgs/connect11.png
  68. BIN
      articles/imgs/connect12.webp
  69. BIN
      articles/imgs/connect13.webp
  70. BIN
      articles/imgs/connect2.webp
  71. BIN
      articles/imgs/connect3.webp
  72. BIN
      articles/imgs/connect4.webp
  73. BIN
      articles/imgs/connect5.png
  74. BIN
      articles/imgs/connect6.webp
  75. BIN
      articles/imgs/connect7.webp
  76. BIN
      articles/imgs/connect8.png
  77. BIN
      articles/imgs/connect9.webp
  78. BIN
      articles/imgs/epoll.png
  79. BIN
      articles/imgs/errorsys1.png
  80. BIN
      articles/imgs/game1.webp
  81. BIN
      articles/imgs/game10.jpeg
  82. BIN
      articles/imgs/game11.webp
  83. BIN
      articles/imgs/game12.webp
  84. BIN
      articles/imgs/game13.webp
  85. BIN
      articles/imgs/game14.webp
  86. BIN
      articles/imgs/game15.webp
  87. BIN
      articles/imgs/game16.webp
  88. BIN
      articles/imgs/game17.webp
  89. BIN
      articles/imgs/game18.webp
  90. BIN
      articles/imgs/game19.webp
  91. BIN
      articles/imgs/game2.webp
  92. BIN
      articles/imgs/game20.webp
  93. BIN
      articles/imgs/game21.webp
  94. BIN
      articles/imgs/game22.webp
  95. BIN
      articles/imgs/game23.webp
  96. BIN
      articles/imgs/game24.webp
  97. BIN
      articles/imgs/game25.webp
  98. BIN
      articles/imgs/game26.webp
  99. BIN
      articles/imgs/game27.png
  100. BIN
      articles/imgs/game28.png

File diff suppressed because it is too large
+ 2626 - 0
articles/C++必知必会的知识点/C++17结构化绑定.html


File diff suppressed because it is too large
+ 2749 - 0
articles/C++必知必会的知识点/C++必须掌握的pimpl惯用法.html


File diff suppressed because it is too large
+ 2500 - 0
articles/C++必知必会的知识点/index.html


File diff suppressed because it is too large
+ 2742 - 0
articles/C++必知必会的知识点/不定参数函数实现var_arg系列的宏.html


File diff suppressed because it is too large
+ 2432 - 0
articles/C++必知必会的知识点/你一定要搞明白的C函数调用方式与栈原理.html


File diff suppressed because it is too large
+ 2501 - 0
articles/C++必知必会的知识点/利用cmake工具生成VisualStudio工程文件.html


File diff suppressed because it is too large
+ 2497 - 0
articles/C++必知必会的知识点/如何使用VisualStudio管理和阅读开源项目代码.html


File diff suppressed because it is too large
+ 2432 - 0
articles/C++必知必会的知识点/如何成为一名合格的CC++开发者?.html


File diff suppressed because it is too large
+ 2432 - 0
articles/C++必知必会的知识点/深入理解CC++中的指针.html


File diff suppressed because it is too large
+ 2525 - 0
articles/C++必知必会的知识点/用VisualStudio调试Linux程序.html


File diff suppressed because it is too large
+ 2433 - 0
articles/C++必知必会的知识点/详解C++11中的智能指针.html


File diff suppressed because it is too large
+ 2617 - 0
articles/Memcached源码分析/00服务器资源调整.html


File diff suppressed because it is too large
+ 2587 - 0
articles/Memcached源码分析/01初始化参数解析.html


File diff suppressed because it is too large
+ 2832 - 0
articles/Memcached源码分析/02网络监听的建立.html


File diff suppressed because it is too large
+ 2702 - 0
articles/Memcached源码分析/03网络连接建立.html


File diff suppressed because it is too large
+ 2701 - 0
articles/Memcached源码分析/04内存初始化.html


File diff suppressed because it is too large
+ 2801 - 0
articles/Memcached源码分析/05资源初始化.html


File diff suppressed because it is too large
+ 2640 - 0
articles/Memcached源码分析/06get过程.html


File diff suppressed because it is too large
+ 2514 - 0
articles/Memcached源码分析/07cas属性.html


File diff suppressed because it is too large
+ 2527 - 0
articles/Memcached源码分析/08内存池.html


File diff suppressed because it is too large
+ 2586 - 0
articles/Memcached源码分析/09连接队列.html


File diff suppressed because it is too large
+ 2523 - 0
articles/Memcached源码分析/10Hash表操作.html


+ 59 - 0
articles/Memcached源码分析/11LRU操作.md

@@ -0,0 +1,59 @@
+# Memcached源码阅读十一 LRU操作
+
+`LRU`是最近最少使用的简称,该技术经常用来实现**cache数据更新**,Memcached使用LRU技术来淘汰老的数据,Memcached默认是启用LRU操作的,在这种情况下所有的set操作都会成功,如果Memcached的内存池已经使用完,则会淘汰老数据来存放新数据,如果关闭了Memcached的LRU,则当Memcached没有多余的内存空间时,Memcached之间返回错误,下面我们分析下LRU的相关操作。
+
+![](../imgs/memcached1.webp)
+
+里面再附一张`Memcached`的**内存结构图**,从图中可以看到LRU队列保持这已经分配出去的item的结构(图中指针为单链表,这里画的有误,其实是双向链表),同时每个`slabclass`由两个指针来维护该表,即`heads`和`tails`指针,分别指向最老的数据和最新的数据,这样便于LRU链表的操作。
+
+```
+//每个slabclass各有一个指针
+static item *heads[LARGEST_ID];
+static item *tails[LARGEST_ID];
+
+//将item加入到对应classid的LRU链的head,这里是item加入到LRU链表中
+static void item_link_q(item *it) {
+    /* item is the new head */
+    item **head, **tail;
+    assert(it->slabs_clsid < LARGEST_ID);
+    assert((it->it_flags & ITEM_SLABBED) == 0);
+
+    head = &heads[it->slabs_clsid];
+    tail = &tails[it->slabs_clsid];
+    assert(it != *head);
+    assert((*head && *tail) || (*head == 0 && *tail == 0));
+    it->prev = 0;
+    it->next = *head;
+    if (it->next) it->next->prev = it;//执行插入数据操作
+    *head = it;
+    if (*tail == 0) *tail = it;
+    sizes[it->slabs_clsid]++;
+    return;
+}
+
+//将item从对应classid的LRU链上移除,这里是item从LRU链表中删除
+static void item_unlink_q(item *it) {
+    item **head, **tail;
+    assert(it->slabs_clsid < LARGEST_ID);
+    head = &heads[it->slabs_clsid];
+    tail = &tails[it->slabs_clsid];
+
+    if (*head == it) {
+        assert(it->prev == 0);
+        *head = it->next;
+    }
+    if (*tail == it) {
+        assert(it->next == 0);
+        *tail = it->prev;
+    }
+    assert(it->next != it);
+    assert(it->prev != it);
+
+    if (it->next) it->next->prev = it->prev;//断开连接
+    if (it->prev) it->prev->next = it->next;
+    sizes[it->slabs_clsid]--;
+    return;
+}
+```
+
+注:图片链接自 http://kenby.iteye.com/blog/1423989

File diff suppressed because it is too large
+ 2657 - 0
articles/Memcached源码分析/12set操作.html


File diff suppressed because it is too large
+ 2657 - 0
articles/Memcached源码分析/13do_item_alloc操作.html


File diff suppressed because it is too large
+ 2502 - 0
articles/Memcached源码分析/14item结构.html


File diff suppressed because it is too large
+ 2619 - 0
articles/Memcached源码分析/15Hash表扩容.html


File diff suppressed because it is too large
+ 2613 - 0
articles/Memcached源码分析/16线程交互.html


File diff suppressed because it is too large
+ 2940 - 0
articles/Memcached源码分析/17状态机.html


File diff suppressed because it is too large
+ 2515 - 0
articles/Memcached源码分析/index.html


File diff suppressed because it is too large
+ 2486 - 0
articles/TeamTalk源码解析/01TeamTalk介绍.html


File diff suppressed because it is too large
+ 2616 - 0
articles/TeamTalk源码解析/02服务器端的程序的编译与部署.html


File diff suppressed because it is too large
+ 3207 - 0
articles/TeamTalk源码解析/03服务器端的程序架构介绍.html


File diff suppressed because it is too large
+ 2432 - 0
articles/TeamTalk源码解析/04服务器端db_proxy_server源码分析.html


File diff suppressed because it is too large
+ 2868 - 0
articles/TeamTalk源码解析/05服务器端msg_server源码分析.html


File diff suppressed because it is too large
+ 2725 - 0
articles/TeamTalk源码解析/06服务器端login_server源码分析.html


File diff suppressed because it is too large
+ 2811 - 0
articles/TeamTalk源码解析/07服务器端msfs源码分析.html


File diff suppressed because it is too large
+ 3701 - 0
articles/TeamTalk源码解析/08服务器端file_server源码分析.html


File diff suppressed because it is too large
+ 2573 - 0
articles/TeamTalk源码解析/09服务器端route_server源码分析.html


File diff suppressed because it is too large
+ 2507 - 0
articles/TeamTalk源码解析/10开放一个TeamTalk测试服务器地址和几个测试账号.html


File diff suppressed because it is too large
+ 2455 - 0
articles/TeamTalk源码解析/11pc客户端源码分析.html


File diff suppressed because it is too large
+ 2502 - 0
articles/TeamTalk源码解析/index.html


BIN
articles/imgs/12306-1.webp


BIN
articles/imgs/12306-10.webp


BIN
articles/imgs/12306-11.webp


BIN
articles/imgs/12306-12.jpeg


BIN
articles/imgs/12306-13.webp


BIN
articles/imgs/12306-14.webp


BIN
articles/imgs/12306-15.jpeg


BIN
articles/imgs/12306-2.webp


BIN
articles/imgs/12306-3.webp


BIN
articles/imgs/12306-4.webp


BIN
articles/imgs/12306-5.webp


BIN
articles/imgs/12306-6.webp


BIN
articles/imgs/12306-7.webp


BIN
articles/imgs/12306-8.webp


BIN
articles/imgs/12306-9.webp


BIN
articles/imgs/atomic1.webp


BIN
articles/imgs/bz1.png


BIN
articles/imgs/bz2.webp


BIN
articles/imgs/cmake1.png


BIN
articles/imgs/cmake2.png


BIN
articles/imgs/cmake3.png


BIN
articles/imgs/cmake4.png


BIN
articles/imgs/connect1.png


BIN
articles/imgs/connect10.webp


BIN
articles/imgs/connect11.png


BIN
articles/imgs/connect12.webp


BIN
articles/imgs/connect13.webp


BIN
articles/imgs/connect2.webp


BIN
articles/imgs/connect3.webp


BIN
articles/imgs/connect4.webp


BIN
articles/imgs/connect5.png


BIN
articles/imgs/connect6.webp


BIN
articles/imgs/connect7.webp


BIN
articles/imgs/connect8.png


BIN
articles/imgs/connect9.webp


BIN
articles/imgs/epoll.png


BIN
articles/imgs/errorsys1.png


BIN
articles/imgs/game1.webp


BIN
articles/imgs/game10.jpeg


BIN
articles/imgs/game11.webp


BIN
articles/imgs/game12.webp


BIN
articles/imgs/game13.webp


BIN
articles/imgs/game14.webp


BIN
articles/imgs/game15.webp


BIN
articles/imgs/game16.webp


BIN
articles/imgs/game17.webp


BIN
articles/imgs/game18.webp


BIN
articles/imgs/game19.webp


BIN
articles/imgs/game2.webp


BIN
articles/imgs/game20.webp


BIN
articles/imgs/game21.webp


BIN
articles/imgs/game22.webp


BIN
articles/imgs/game23.webp


BIN
articles/imgs/game24.webp


BIN
articles/imgs/game25.webp


BIN
articles/imgs/game26.webp


BIN
articles/imgs/game27.png


BIN
articles/imgs/game28.png


Some files were not shown because too many files changed in this diff