c++
文章平均质量分 83
Automannnn
愿你初心不改,归来仍是少年。
展开
-
nanomsg笔记--通信协议与传输协议
花了一段时间吧nanomsg的源码给编译了一遍,同时对里面的主要的协议进行了调试。 由于该项目是c写的,发现可读性太差了,调试了很多遍仍然模模糊糊的。再加上该项目中的代码量也不低,所以这个练习是我吸收的最差的一个。 决定不能再在上面耗着了,将目前能够理解的,结合网友的经验帖进行记录一下。 注意,这里的传输协议不是规范的叫法,也并非tcp/ip协议的那个传输层协议,而是属于应用层...原创 2020-04-05 17:18:24 · 5700 阅读 · 0 评论 -
nanomsg笔记--stl跨平台的实现
因为自己没有在实际的场景中用过消息队列,因此长期都比较好奇。这段时间正好有空余时间看一看相关的源码。 在网络上搜索了一圈,加上最近在学习c++,便找到了一个叫做ZeroMQ的项目,听说挺出名的,可惜没找到地址,不过找到了它的作者用c重构的版本——nanomsg。 于是就开始操作了。 这个项目蛮大,看了时间跨度在两年多,支持windows与unix系统。 由于我并没有在linux使用过c...原创 2020-04-05 14:15:59 · 569 阅读 · 0 评论 -
c++ 通信演进level4 ----多线程异步非阻塞通信(AIO)
今天,将最后一个流模型例子给记录一下,代码同样来自于网上。由于一些原因,导致心情不是很好,还是按照既定计划,将该demo的笔记记录一下。源码地址:地址。 它是基于 windows的iocp完成的,所以是异步非阻塞io。 最近看了很多的关于io说明的,各种帖子看的我头大,始终还是没彻底搞懂,估计是没接触过太多,境界还没到。但是毫无疑问的是,windows的iocp是属于异步非阻塞io的...原创 2020-03-11 22:29:53 · 1026 阅读 · 0 评论 -
c++ 通信演进level2 ----多线程同步阻塞通信(BIO)
这一篇是在昨天写的基础上,查阅了一些资料,对于BIO模型做了更深一步的理解后,实现的代码:地址。 主要修改的代码在于:typedef struct { HANDLE thread; SOCKET sock;}AcceptNode;//保存连接的容器list<AcceptNode*> acceptList;......int main(){ ...原创 2020-03-11 10:17:17 · 339 阅读 · 0 评论 -
c++ 通信演进level3 ----多线程同步 非阻塞通信(NIO)
本篇文章的源码同样来自网络上,自己稍加整理,并做一下源码方面的分析。本例子的作用一方面是为了理解http服务器,另一方面,是作为学习流操作的NIO模型层次。地址在这里:地址。 代码结构如下:首先,定义两个结构体,用于存储 接收的socket链表,以及存储 与当前socket绑定的 thread链表://标识客户端的节点 链表typedef struct _NODE...原创 2020-03-10 20:33:12 · 1344 阅读 · 0 评论 -
c++ 通信演进level1 ----单线程同步阻塞通信
本篇,纪录一个在 windows上使用 socket进行通信的例子,代码源自于网上。由于时间过去挺久了,当时我也没有加书签,现在暂时还不好找出处。 文中给出一些关键代码片段,一方面用于巩固我所学的知识,另一方面,用于纵向的技术对比,加深理解。完整的地址在这里:地址。 首先看看项目结构:服务端的关键代码:int main(){ //加载Winsock库,初始化so...原创 2020-03-10 18:39:20 · 351 阅读 · 0 评论 -
一个Windows下线程池的实现(c++) -------笔记
本篇的代码来自于一个Windows下线程池的实现(c++),同时,由于我的开发环境是clion+cmake,不是用的vs,所以也贴一下源码地址:这里 原文中工作原理图已经很明白的介绍了这个线程池的实现架构,这里为了我学习的需要,从代码角度分析这个小例子。 代码结构方面,我将整个demo分为了两块,线程管理包,以及 任务包。 二者是以动态库的形式进行调用,也是为了熟悉cm...原创 2020-03-09 10:46:02 · 831 阅读 · 0 评论 -
windows系统使用c++实现一个小型jvm(四)------------jvm的gc 以及 jvm是什么
这篇文章记录一下gc和对虚拟机的理解,其它的相关jvm的内容就暂时先不涉及了,以后有机会再弄。1.gc流程 在前台的文章中,我记录了一个模拟的gc流程,那个里面由于对于根对象 具有很高的抽象程度,因此对java的gc想要去了解一下,这里分块看看gc的源码:// 0. create a TEMP new-oop-pool: unordered_map<Oop...原创 2020-03-08 15:50:49 · 338 阅读 · 0 评论 -
windows系统使用c++实现一个小型jvm(三)------------jvm的启动细节2
这篇文章接着上午记录下。1.标准输入输出流是怎么来的? 在写java程序的时候,我们经常输出控制台信息,调用的如下代码: System.out.Println(); 在这里,我将解释这个的由来。 jvm在初始化时,必须先加载FileDescriptor,FileDescriptor有三个静态成员: 它们会调用本地FileDescriptor的SetI方法:...原创 2020-03-08 15:09:06 · 410 阅读 · 0 评论 -
windows系统使用c++实现一个小型jvm(三)------------jvm的启动细节1
今天上午,主要将昨天下午运行机制中,jvm的launch方法的内容详细讲述一下。 在vm的launch中,有如下方法块:....HANDLE cur_handle = (HANDLE)(_beginthreadex(NULL, 0, scapegoat, &p, 0, NULL)); this->tid = GetThreadId(cur_handle); //...原创 2020-03-08 11:00:55 · 443 阅读 · 0 评论 -
windows系统使用c++实现一个小型jvm(二)------------jvm的运行机制
上午写了一下环境介绍,下午接着将jvm的运行机制给记录一下。 我将从源码角度,进行分析,一步步的将一个java程序的生到死进行梳理。 需要注意,启动程序的时候,需要带一个参数,该参数为 当前需要执行 class文件,里面需要包含mian()方法。 当然了,这是其中一种的类启动方式,还有一种jar启动方式,我将在后文进行分析。 当前环境下,我是指定了一个 helloworld...原创 2020-03-07 16:41:08 · 420 阅读 · 0 评论 -
windows系统使用c++实现一个小型jvm(一)------------环境介绍及背景说明
背景说明: 首先,本个小demo并不是我自己写的,说是小demo,实际也不小,总共的代码量有3兆多了。原创的大牛在这儿-----用 C++ 实现了一个小型的 jvm!!!! 当我看到这个贴子时候以及它的代码量之后,心里是既高兴,又犹豫的。 为什么呢? 高兴是因为,没想到能够有机会接触这么底层的东西,当把它吃透后,想想自己的java造诣也能再进一步吧,同时也能呼应上一篇文章...原创 2020-03-07 11:17:15 · 585 阅读 · 0 评论 -
windows系统使用c++实现自动垃圾回收的小demo
自从疫情爆发以来,过得挺充实,天天学习,乐此不疲。 可惜就是把实习工作给戳脱了,不然就完美。哈哈哈,不过这段时间的收获还是很足很足的,朕心甚悦!! 这段时间主要在加强对c++ 的学习,练习了很多小的demo,通过对相对底层语言的学习实践,达到掌握很多高层知识的目的(事实上,很多知识记了又忘,忘了又记,恶性循环的原因在于理解的深度不够)。 接触了java三年多,大部分知识自学,一直听说...原创 2020-03-06 23:30:46 · 613 阅读 · 0 评论 -
c++与c的区别
列个提纲,方便回顾与寻找! 1.时间上的差别; 2.逻辑范围(包含与被保护); 3.强制类型转换不同; 4.标准输入输出不同; 5.函数参数使用不同; 6.函数重载不同; 7.变量作用域; 8.new,delete运算符; 9.引用型变量;原文: c语言与C++有什么区别?...转载 2019-04-03 23:22:52 · 239 阅读 · 0 评论