摘要:Thrift IDL基于Thrift Types,并且考虑到Thrift Types的定义,Thrift IDL文件由Thrift代码生成器处理,为各种目标语言生成代码,以支持IDL文件中定义的结构和服务。 一、Thrift类型系统(Thrift Types)Thrift类型系统致力于让程序员尽可能 阅读全文
posted @ 2018-07-09 15:28 丹西 阅读 (367) 评论 (0) 编辑
摘要:cygwin的配置就不多说了,缺什么就通过安装器安装好了。 在thrift的官网下载 thrift-0.11.0源码,通过cmake编译,生成Makefile之后,make出现编译错误 查看cmake生成Makefile的日志,在某个cmake文件里设置了-std=c++11,找到: D:\work 阅读全文
posted @ 2018-06-25 17:26 丹西 阅读 (320) 评论 (0) 编辑
摘要:V8是google提供高性能JavaScript解释器,嵌入在chromium里执行JavaScript代码。 V8本身是C++实现的,所有嵌入本身毫无压力,一起编译即可,不过作为一个动态语言解释器,它的世界观肯定跟C++还是有区别的。 编程语言定义了计算机对现实世界的表达方式,不同的语言有不同的认 阅读全文
posted @ 2018-01-29 15:12 丹西 阅读 (835) 评论 (0) 编辑
摘要:最近积累了一些关于HTTP缓存的知识,因此结合Chromium的实现总结一下,主要从如下2个分面: 1、HTTP缓存的基础知识 2、Chromium关于HTTP缓存的实现分析 一、HTTP缓存的基础知识 基本上每个浏览器都启用了HTTP缓存功能。 当服务器返回响应时,会响应一组HTTP头,用于描述响 阅读全文
posted @ 2017-12-08 11:52 丹西 阅读 (668) 评论 (0) 编辑
摘要:JavaScript 图像替换 JavaScript 图像替换技术检查设备能力,然后“做正确的事”。 您可以通过 window.devicePixelRatio 确定设备像素比,获取屏幕的宽度和高度,甚至可通过 navigator.connection 或发出假请求来执行某种网络连接嗅探。收集了所有 阅读全文
posted @ 2017-12-04 17:32 丹西 阅读 (301) 评论 (0) 编辑
摘要:第一篇就有提到Chromium是目前默认是采用多进程架构,当然,chromium有singe-process的版本。 多进程与多线程的区别,确实有很多可以讲的,我的另一篇博客也讲了一些 (Linux 进程,线程),这里是从浏览器的角度来说,如果是多线程,如果一个线程崩溃,影响了整个浏览器的使用,因为 阅读全文
posted @ 2017-11-02 10:21 丹西 阅读 (3018) 评论 (0) 编辑
摘要:上一篇总结了chromium进程的启动,接下来就看线程的消息处理,这里的线程包含进程的主线程。 消息处理是由base::MessageLoop中实现,消息中的任务和定时器都是异步事件的。 主要如下几点: 1、消息的类型分类 2、延时处理的消息是如何实现 一、消息分类 chromium主要将消息类型如 阅读全文
posted @ 2017-10-19 15:15 丹西 阅读 (1358) 评论 (8) 编辑
摘要:最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先从Browser进程启动以及IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的quagga里thread。 首先来看看chromium的多进程模型: 图 阅读全文
posted @ 2017-10-18 15:42 丹西 阅读 (1540) 评论 (0) 编辑
摘要:虚拟机 : vmware 12 image: ubuntukylin 14.04.1 系统版本:Linux dancy 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014 i686 i686 i686 GNU/Linux 虚拟机 阅读全文
posted @ 2017-09-11 14:56 丹西 阅读 (252) 评论 (0) 编辑
摘要:一、video容器 你可能经常看到.avi或.mp4的视频文件,实际上avi或者mp4只是一种视频容器。打个比方,ZIP的压缩文件可以包含各种各样的文件,同理,视频容器也定义用来怎么存放各种视频流,而不是指具体的某种视频流。 当然,不是所有的视频流都兼容所有的视频容器。 扩展名为:.mp4, .m4 阅读全文
posted @ 2017-08-08 10:14 丹西 阅读 (130) 评论 (0) 编辑
摘要:linux下chromium的入口函数在文件:src/chrome/app/chrome_exe_main_aura.cc 中 ChromeMain函数在 src/chrome/app/chrome_main.cc 中 具体函数如下: 接下来进入文件: src/headless/app/headle 阅读全文
posted @ 2017-06-15 22:12 丹西 阅读 (496) 评论 (0) 编辑
摘要:1、典型的CE-HTML代码如下: 2、CE设备显示正常的HTML网页有如下的问题 (1)在有一定视觉距离的电视或机顶盒上,小字体和图片的体验很差 (2)正常的HTML只能基于鼠标或键盘来浏览,不能通过遥控来浏览 (3)有超链接的元素没有高亮出来,用户分辨不出这些链接 (4)有很多不能兼容的浏览器扩 阅读全文
posted @ 2017-05-25 20:28 丹西 阅读 (136) 评论 (0) 编辑
摘要:multi-tap又称 multi-press . 是在手机,或者电视遥控上的keypad定义,有如下2类标准: 1. ITU-T E.161 2.T9 使用举例如下: Consider a typical phone keypad: A standard ITU-T E.161 keypad us 阅读全文
posted @ 2017-05-23 14:37 丹西 阅读 (134) 评论 (0) 编辑
摘要:网卡RSS(receive side scaling)简介RSS是一种网卡驱动技术,能让多核系统中跨多个处理器的网络收包处理能力高效能分配。注意:由于同一个核的处理器超线程共享同一个执行引擎,这个效果跟有多个物理核的处理器不一样。因此,RSS不能使用超线程处理器。为了有效的处理收包,一个minipo 阅读全文
posted @ 2017-04-25 14:34 丹西 阅读 (4890) 评论 (0) 编辑
摘要:1 #include 2 #include 3 #include 4 #include 5 6 #define HASH_BUCKET_MAX (1024) 7 #define HASH_BUCKET_CAPACITY_MAX (256) 8 #define HASHTABLE_DEBUG 9 #define TRUE 1 10 #define ... 阅读全文
posted @ 2017-04-20 09:59 丹西 阅读 (416) 评论 (0) 编辑
摘要:Linux /proc/sys/net/ipv4/* 变量TCP变量:somaxconn - INTEGER listen()的backlog参数的上限,在用户态为SOMAXCONN。默认是128。也可参考TCP socket调优的tcp_max_syn_backlog参数。 tcp_abort_o 阅读全文
posted @ 2017-04-14 16:10 丹西 阅读 (570) 评论 (0) 编辑
摘要:背景: 经常使用scp传文件,发现它真的很给力,好奇心由来已久! 恰好接到一个移植SSH服务到专有网络(非IP网络)的小任务,完成工作又能满足好奇心,何乐而不为! 我只从源码浅浅的分析一下,后续有更多想法再补充 源码赏析: 1、所有的故事都从main开始,也从main结束。(main也很无辜,它只是 阅读全文
posted @ 2017-04-08 01:00 丹西 阅读 (1434) 评论 (0) 编辑
摘要:目录 识别网卡 命令行参数 附加配置 技术支持 一、识别网卡e1000e驱动支持Intel所有的GbE PCIe网卡,除了82575,82576,基于82580系列的网卡。提示:Intel(R) PRO/1000 P Dual网卡是支持e1000,但不支持e1000e,因为82546部分支持PCIe 阅读全文
posted @ 2017-04-01 21:04 丹西 阅读 (3231) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 分层调度器的时机主要体现在TX侧,正好在传递报文之前。它的主要目的是在每个网络节点按照服务级别协议来对不同的流量分类和对不同的用户的报文区分优先级并排序。一、概述分层调度器跟以前使用网络处理器实现的每条流或一组流的报文队列和调度的流量管理器很相似。它看起来像在传输之前的一 阅读全文
posted @ 2017-04-01 12:30 丹西 阅读 (1733) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 下面是一个支持Qos的复杂报文处理流水线的图;流水线是通过DPDP可重用的软件库构建出来的。在流水线里实现QoS主要是如下模块:policer,dropper,shceduler。下面是这些模块的功能性描述。 下面列出的基础模块始终在整个报文处理流水线中使用 在每个特定应 阅读全文
posted @ 2017-04-01 12:27 丹西 阅读 (829) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 vhost库实现了一个用户空间的virtio net server,允许用户直接处理virtio ring队列。换句话说,它让用户可以从VM virtio网络设备读取或写入数据包,为了达到这个目的,vhost库应该可以: 访问客户虚拟机内存,对于QEMU,这个是通过设置 阅读全文
posted @ 2017-03-31 18:11 丹西 阅读 (1152) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 DPDK的librte_pdump库,提供了在DPDK框架下抓包的功能。这个库通过完全复制Rx和Tx的mbuf到一个新的内存池,因此它降低应用程序的性能,所以只推荐在调试的时候使用。pdump库提供了如下的API来初始化这个抓包框架,使能或者停止抓包,以及清理退出抓包框架 阅读全文
posted @ 2017-03-31 16:22 丹西 阅读 (3795) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 dpdk提供了一个访问控制库,提供了基于一系列分类规则对接收到的报文进行分类的能力。ACL库用来在一系列规则上执行N元组查找,可以实现多个分类和对每个分类查找最佳匹配(最高优先级),ACL库的api提供如下基本操作: 创建一个新的访问控制(AC)环境实例(context) 阅读全文
posted @ 2017-03-31 12:39 丹西 阅读 (2721) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 在一些平台,所谓的内存映射I/O在保序执行这方面是没有保障的。在这些平台,驱动写入器负责保证I/O写操作按照预期的顺序写到设备内存映射地址。 代表性的做法是通过读取一个安全的设备或桥接寄存器,该寄存器可以导致I/O芯片在任何读操作发生前刷新所有带处理的写操作到设备上。 驱 阅读全文
posted @ 2017-03-30 19:08 丹西 阅读 (277) 评论 (0) 编辑
摘要:Qscintilla2的下载地址: 以上2个地址都可以下载。 我的编译环境是QT5+mingw5.3,将下载的压缩包解压缩之后,首先进入到解压缩之后的目录Qt4Qt5,举个栗子:E:\code\qscintilla-master\Qt4Qt5 找到 qscintilla.pro 文件 ,双击会起动到 阅读全文
posted @ 2017-03-29 22:52 丹西 阅读 (410) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 arm64的异常模型由一组异常级别(EL0-EL3)组成。EL0,EL1有安全模式和非安全模式的区别。EL2是虚拟机管理级别并且只有非安全模式。EL3是最高优先级并且只存在安全模式中。为了描述方便,下面将使用术语“boot loader”来简化所有执行在cpu将控制权转交 阅读全文
posted @ 2017-03-29 16:36 丹西 阅读 (2698) 评论 (0) 编辑
摘要:原创翻译,转载请注明出处。 页表转换arm64在硬件体系结构上支持4级的每页大小为4K的页表转换,也支持3级的页大小64KB的页表转换。在linux arm64中,如果页的大小为4KB,使用3级页表转换或者4级页表转换,用户空间和内核空间都支持有39bit(512GB)或者48bit(256TB)大 阅读全文
posted @ 2017-03-29 10:05 丹西 阅读 (1430) 评论 (0) 编辑
摘要:想做一个多线程服务器测试程序,因此参考了github的一些实例,然后自己动手写了类似的代码来加深理解。 目前了解的线程池实现有2种思路: 第一种: 主进程创建一定数量的线程,并将其全部挂起,此时线程状态为idle,并将running态计数为0,等到任务可以执行了,就唤醒线程,此时线程状态为runni 阅读全文
posted @ 2017-03-28 21:05 丹西 阅读 (196) 评论 (0) 编辑
摘要:在linux内核,线程与进程的区别很小,或者说内核并没有真正所谓单独的线程的概念,进程的创建函数是fork,而线程的创建是通过clone实现的。 而clone与fork都是调用do_fork(),差异如下: 实际上就是内核开放大部分参数和do_fork接口来创建线程,看clone的官方解释: 所以接 阅读全文
posted @ 2017-03-25 16:58 丹西 阅读 (347) 评论 (0) 编辑
摘要:单例模式就是一个C++语法精华浓缩的一个体现,有句老话:麻雀虽小五脏俱全!来形容单例非常贴切! 下面的代码分析了如果自己malloc并且memcpy一个单例指针会带来很大危害并如何防止这种情况发生。 总结: 1、以上单例是比较常见的实现 2、memcpy会破坏这个单例的唯一性 3、memcpy出来的 阅读全文
posted @ 2017-03-24 12:23 丹西 阅读 (146) 评论 (0) 编辑