2017-06-07 11:13
⁄ 工业·编程
⁄ 共 5905字
epoll内核实现
(1)内核为epoll做准备工作
这个模块在内核初始化时(操作系统启动)注册了一个新的文件系统,叫"eventpollfs"(在eventpoll_fs_type结构里),然后挂载此文件系统。另外还创建两个内核cache(在内核编程中,如果需要频繁分配小块内存,应该创建kmem_cahe来做“内存池”),分别用于存放struct epitem和eppoll_entry。这个内核高速cache区,就是建立连续的物理内存页,就是物理上分配好你想要的size的内...
epoll, IO, 源码阅读全文
2017-05-31 11:11
⁄ 工业·编程
⁄ 共 1259字
应用层调用poll时,内核调用了sys_poll
在sys_poll中首先初始化,判断了nfds是超过struct file支持的最大的fd数(默认256),将传入的timeout时间转化为cpu时钟周期,并且调用了poll_initwait初始化了一个函数指针,用于操作系统异步回调的;
接下来,进行了一个while循环,从0到nfds给每一个struct pollfd对象开辟内存,是以链表节点poll_list大小开辟的(一个链表节点是一个page,链表节点中有struct pollfd结构),然后将用户空...
IO, poll, 源码阅读全文
2017-05-24 10:40
⁄ 工业·编程
⁄ 共 3712字
在一个大的工程中,源文件不计其数,其可能会按类型、功能、模块分别放在若干个目录中,那我们每次去编译的时候就会输入一长串编译命令以及相应的路径,极其麻烦;另外一点就是每次若更改了一个源文件,对于其他没有更改的文件也得重新编译,效率低下。为了解决这些问题,makefile出现了。
makefile
1:makefile关系到整个工程的编译规则(根据你写的依赖关系执行),决定了哪些文件需要先编译,哪些文件需要后编译,哪些文件需...
Makefile阅读全文
2017-05-17 08:16
⁄ 工业·编程
⁄ 共 2404字
对于后台开发,一个重要问题即使用尽可能少的服务器资源处理海量的请求,除了我们再架构上做多机自动扩容外,我们还必须尽可能提高单机硬件的利用率(CPU利用率+IO利用率)
为了提高硬件的利用率往往我们采用三种技术路径:
多线程
异步IO
协程
协程和异步IO以及多线程的对比
多线程
多线程可以充分利用CPU的多核,实现真正的并行,它是操作系统的基础设施。但是线程是一个粗粒度、相对比较笨重的多任务的抽...
协程阅读全文
2017-05-10 07:26
⁄ 工业·编程
⁄ 共 1957字
之前一直没想明白了一个问题, 就是关于协程如何进行上下文切换。众所周知, 协程是分为有栈协程和无栈协程俩种. 区别在于是否有自己的调用栈来进行函数调用等操作.
有栈协程
有栈协程这里的做法比较好理解, 一般来说有俩种做法:
采用操作系统提供的api 类似 ucontext 或者 setjump longjump
用汇编操控寄存器保存状态 典型的例子
static void context_swap(struct Context* prev_, struct Context* next_)
{
// store in .da...
协程阅读全文
2017-05-08 21:26
⁄ 数理涉猎
⁄ 共 9099字
王文素,字尚彬,山西汾州人,于明朝成化年间(1465—1487年) 随父王林到河北饶阳经商,遂定居。自古晋商多儒,出身于中小商人家庭的王文素,受所处社会及家庭影响,自幼颖悟,涉猎书史,诸子百家,无不知者。尤长于算法,留心通证,以一生之精力,完成了《算学宝鉴》这一数学巨著,为后人留下了宝贵的财富。
一、数学巨匠王文素
数学,古代称为数,后又有数术、算数、算学、...
历史名人, 数学阅读全文
2017-05-03 06:45
⁄ 工业·编程
⁄ 共 1665字
https://github.com/tonbit/coroutine是一个精巧的C++非对称协程库。库只有一个.h文件(<500行的代码),使用时也仅需要include这个头文件。但是在功能上,可以提供Linux/Macos/Windows平台的几个必备的协程API(命名空间coroutine):
* 创建协程:routine_t create( std::function<void()> f );
* 销毁协程:void destroy( routine_t id );
* 恢复协程:int resume( routine_t ...
协程阅读全文
2017-04-26 18:17
⁄ 工业·编程
⁄ 共 1663字
对于IO密集型的程序,一般比较高效的做法是选择异步来实现,因为使用异步的方法更容易写出高效的程序。然而使用异步的话,经验较少的人往往会使自己的程序结构变得很混乱,进而导致程序的可读性变差。记得有人说过,在硬件飞速发展的现在,程序的可读性和可维护性的重要性在不断提高,甚至有一种更激进的说法,程序的可读性是第一位的。
从Boost的1.54版本开始,coroutine引入了一种新型...
协程阅读全文
2017-04-19 08:48
⁄ 工业·编程
⁄ 共 3148字
1 PE文件
1.1 PE文件简介
PE文件是Portable Executable(可移植的可执行文件)的简写。EXE、DLL、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件。
1.2 PE文件格式
PE文件都有相同的格式,其格式如图1所示。
图1 PE文件格式
从图1可以看出,PE文件主要包含头和数据部分,其中可以将头部看作是数据的索引。而头部又包含了DOS头、NT头和Section头三部分。DOS头包含了MZ文件头和DOS块两部分。所以,PE文件格式...
PE, PEVew, 逆向阅读全文
2017-04-12 11:13
⁄ 工业·编程
⁄ 共 11534字
ATL(Active Template Library活动模板库)是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等等控件。
一. 什么是ATL
自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大的开发...
ATL阅读全文