自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 线程池的实现

为什么要使用线程池:因为线程的创建和销毁占了大量的CPU等系统资源,使用线程池可以解决这种情况,提高服务器的性能。线程池的思想:(1)先在内存中开辟出一些数目固定的线程。(2)当请求到达时,从线程池中选择一个空闲的线程来服务,服务完成时,线程放入线程池。(3)当请求到答时,没有空闲的线程,将请求放到任务队列中,等有空闲的线程时在处理。

2017-07-29 14:47:35 205

原创 源码剖析---------webbench(测压工具)

1、webbench:是一个压力测试工具,最多可以有3万个并发客户端发起请求,适用于小型的网站。主要测试每秒钟请求数和每秒钟数据传输量,同时支持静态、动态、SSL,部署简单,静动态均可测试。2、安装:特别简单,百度一下就知道。3、选项:在安装完成后,在命令行输入webbench或webbench -h或webbench -help,就可以知道他的它的命令选项有哪些。第一行是他该

2017-07-25 17:42:59 362

原创 判断两个链表是否相交,若相交,求交点

解题思路:链表相交有3种大的情况,两个链表都带环;都没带环;一个带环,一个没带环;1.两个链表都带环。2.一个链表带环,一个链表没有带环,则他们肯定不相交。3.两个链表都没带环。代码: //判断链表是否带环 Node* ListIsLoop(Node* head) { Node* solw=head; Node* fast=head; w

2017-07-18 11:01:21 226

原创 可重入函数与线程安全的区别与联系

可重入函数:主要用于多任务环境中,在函数执行任何时刻中断它,操作系统转而执行其他程序,从其他程序返回,继续执行这个函数并且不会出现错误。也就是它只使用自身栈上的数据,并不依赖任务环境(全局变量,static)。如果使用全局变量,当多个进程调用这个函数,会产生不可预估的结果。特点:(1)多次调用不会出错,不用担心数据被破坏。(2)任何时刻都可以被中断。数据不会丢失。(3)只使用局部变

2017-07-13 18:10:08 310

原创 用c语言实现继承和多态

继承和多态是C++的特性,它C语言没有这个特性。C++的三大特性:继承,多态,封装。继承:分为公有(public)继承,私有(private)继承,保护(protected)继承。用struct来模拟实现,因为struct在C和C++中都能可以使用,在C中称为结构体在C++中称为类,但他们的原理是一样的,又因为struct的限定符默认是公有的,在C中没有限定符这个概念,所以用C语言只能

2017-07-10 00:01:13 1004

原创 用C++实现单例模式

什么是单例模式:一个类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。#includeusing namespace std;#include//单例模式--》只能实现一个实例//多线程下不安全--》new Singleton不是原子操作//class Singleton//{//public:// static Singleton* GetSinglet

2017-07-07 18:32:49 218

原创 为什么fork()2次会避免产生僵尸进程

什么是僵尸进程:用fork()创建子进程后,子进程已终止但父进程没有对它进行善后处理,那么子进程的进程描述符就一直保存在内存中,子进程就是僵尸进程。怎么产生僵尸进程:1.父进程没有SIGCHLD信号处理函数,也就是没有调用wait()/waitpid()来获取子进程的退出状态,也就没存对进程描述符进行处理。2.父进程有调用wait()/waitpid()函数,但当子进程已终止时父进程还

2017-07-07 00:46:04 962

原创 不能被继承的类

解题思路:1、C++中的子类构造函数会自动的调用父类的构造函数,子类析构函数会自动调用父类的析构函数。那么把构造和析构函数定义为私有的,就不能被继承了。2、缺陷:定义为私有函数时,要在类外创建类的对象,只能实现成要么在栈上创建要么在堆上创建。//因为构造函数和析构函数都为私有的,所以他不能被继承//缺陷:它只能在堆上生成,不能在栈上生成。class A{public: sta

2017-07-06 00:22:52 730

原创 如何定义一个只能在栈上生成对象的类

这个题目考察了对C++语法的理解和应用。1.只能在栈上声明对象,说明这个类不能在堆上声明,也就是说不能用new来实现。2.把类的构造函数声明为protect,就可以达到在类外不用在堆上new,但这个也同时在类外不能在栈上声明对象,必须在类内实现一个接口,来达到在栈上声明对象。3.在类外调用成员函数,必须要用类的对象来调用,但是在类外不能声明类的对象,这个要怎么办呢???   在类的

2017-07-05 17:53:46 352

原创 socketpair

1.int socketpair(int domain, int type, int protocol, int fd[2]);    //创建未命名的全双工管道,可以在一个主机上通信,也可以在网络上通信domain(套接字的域):AF_LOCAL  用于在一个主机上通信                                   AF_INET         用于在网络上通

2017-07-05 00:28:07 348

原创 文件I/O(不带缓存)++标准I/O(带缓存)

概念:      不带缓冲I/O:指每个read和write都调用内核中的一个系统调用。也指在用户区没有缓存,在内核还是有缓存。在进行写操作时,将数据先复制到内核的缓冲区,然后排入对鞋。最后再写到磁盘。比如:要写20个字节,将要调用20次的write。      产生的问题:一次写多,多次调用系统调用,效率低下。      带缓冲I/O:指在系统调用上多加了一个缓冲区,来减少系统调用。

2017-07-04 00:08:13 364

原创 进程程序替换------>exec 函数家族

调用exec并不创建新进程,只是用磁盘上的新程序替换了当前进程的正文段,数据段,堆段,栈段。1.int execl(const char* pathname,const char* arg,....../* (char*)0 */);int main(){ pid_t id=fork(); if(id==0) { execl("/bin/ls","ls","-a","-l

2017-07-02 13:36:18 271

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除