摘要:
Effective C++学习笔记:确定基类有虚析构函数设想在一个军事应用程序里,有一个表示敌人目标的类: class enemytarget{public:enemytarget() { ++numtargets; }enemytarget(const enemytarget&) { ++numtargets; }~enemytarget() { --numtargets; }static size_t numberoftargets(){ return numtargets; } virtual bool destroy(); // 摧毁enemytarget对象后// 返回成功 阅读全文
摘要:
C++虚函数表解析(转)C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大 阅读全文
摘要:
LRU和LFU是不同的!LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!比如,第二种方法的时期T为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4注意,当调页面4时会发生缺页中断若按LRU算法,应换页面1(1页面最久未被使用) 但按LFU算法应换页面3(十分钟内,页面3只使用了一次)可见LRU关键是看页面最后一次被使用到发生调度的时间长短,而LFU关键是看一定时间段内页面 阅读全文
摘要:
NAMEepoll - I/O event notification facilitySYNOPSIS#include DESCRIPTIONepoll is a variant of poll(2) that can be used either as Edge or Level Triggered interface and scales well tolarge numbers of watched fds. Three system calls are provided to set up and control an epoll set: epoll_cre-ate(2), epol 阅读全文
摘要:
1. 终端 在Linux系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),Shell进程启动的其他进程的控制终端也是这个终端。默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出都指向控制终端,进程从标准输入读也就是读用户的键盘输入,进程往标准输出或标准错误输出写也就是输出到显示器上。此外在控制终端输入一些特殊的控制键可以给前台进程发信号,例如Ctrl+C表示SIGINT,Ctrl+\表示SIGQUIT。2. 会话与进程组 每次用户登录终端时会产生一个会话(session)。从用户登录开始.. 阅读全文
摘要:
socketpair - a slight generalization of pipes used for two-way stream communication.以下内容来自:匠意雕码 http://my.oschina.net/zengsai/blog/12583今天用了一个从没玩过的socket函数socketpair(),它的作用是在进程内创建一对sock连接。乍一看好像也没什么,但是配合fork()使用之后就是各种欢乐。如下。#define STRING1 "message from parent"#define STRING2 "messgae f 阅读全文
摘要:
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。 比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同 Unix环境下守护进程的编程规则并不一致。需要注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将给出Linux下守护进 阅读全文
摘要:
您現在正設計一個交通號誌程式,假設目前只有紅、綠、黃三個燈號,您也許會這麼設計:class TrafficLight {private enum State {RED, GREEN, YELLOW}private State state = State.RED;void change() {switch(state) {case RED:System.out.println("紅燈");sleep(5000);state = State.GREEN;break;case GREEN:System.out.println("綠燈");sleep(5000) 阅读全文
摘要:
您現在正設計一個交通號誌程式,假設目前只有紅、綠、黃三個燈號,您也許會這麼設計:class TrafficLight {private enum State {RED, GREEN, YELLOW}private State state = State.RED;void change() {switch(state) {case RED:System.out.println("紅燈");sleep(5000);state = State.GREEN;break;case GREEN:System.out.println("綠燈");sleep(5000) 阅读全文
摘要:
每個執行緒處理一個請求,每次執行緒執行完請求後,再次嘗試取得下一個請求並執行,這是Worker Thread的基本概念,對於一些需要冗長計算或要在背景執行的請求,可以採用Worker Thread。在 Thread-Per-Message 模式中,其實已經有點Worker Thread的概念,在Service物件接收到資料後,以匿名方式建立執行緒來處理資料,那個建立的執行緒就是Worker Thread,只不用過就丟了。Worker Thread可以應用在不同的場合,例如在 Guarded Suspension 模式 的範例,是使用一個執行緒來處理請求佇列中的請求,如果請求不斷來到,且請求中可 阅读全文