自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux下用c语言实现一个简单的线程池

首先大家思考一个问题:为什么需要内存池?我们知道应用程序创建一个对象,然后销毁对象是很耗费资源的。创建线程,销毁线程,也是如此。因此,我们就预先生成一些线程,等到我们使用的时候在进行调度,于是,一些"池化资源"技术就这样的产生了。1 线程池优点下面使用网上资源验证线程池如何提高服务器性能的。多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单

2017-06-23 21:08:54 3990 3

原创 反引号与$()的区别以及eval的作用

$( )与` `(反引号)在bash shell中,$( )与` `(反引号)都是用来做命令替换(command substitution)用的。命令替换:echo pwd  这里的pwd就是一个字符串不是命令,所以输出的就是pwd这个字符串,$()和反引号将字符串解释成命令了,用$( )的理由1. ` `很容易与' '(单引号)搞混。有时在一些

2017-06-22 00:39:48 1296

原创 shell脚本基础知识

shell脚本 入门 —— 符号篇shellShell就是一个命令行解释器 ,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。Shell还有一种执行命令的方式称为批处理 (Batch),用户事先写一 个Shell脚本 (Script),其中有很多条命令,让Shell一次把这些命令执行完,而不

2017-06-21 17:41:42 255

原创 STL之deque源码剖析

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点。vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间。但是其在分配的内存不够的情况下,需要对容器整体进行重新分配、拷贝和释放等操作,而且在vector中间插入或删除元素效率很低。而list是以节点形式来存放数据,使用的是非连续的内

2017-06-17 16:53:22 638

原创 STL之list源码剖析

List概述List和Vector都是STL的序列式容器,唯一不同的地方就在于:Vector是一段连续的内存空间,List则是一段不连续的内存空间,相比于Vector来说,List在每次插入和删除的时候,只需要配置或释放一个元素空间,对于任何位置的插入和删除操作,List永远能做到常数时间。但是,List由于不连续的内存空间,导致不支持随机寻址,所以尺有所长寸有所短,在程序中选择使用那

2017-06-17 16:43:15 389

原创 mmap映射区和shm共享内存的区别总结

linux中的两种共享内存。一种是我们的IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储映射I/O(mmap函数)在说mmap之前我们先说一下普通的读写文件的原理,进程调用read或是write后会陷入内核,因为这两个函数都是系统调用,进入系统调用后,内核开始读写文件,假设内核在读取文件,内核首先把文件读入自己的内核空间,读完之后进程在内核回归用户态,内核

2017-06-13 11:45:24 26293 12

原创 I/0多路复用 select、poll、epoll之间的区别总结

select()和poll() IO多路复用模型select优点:1.一次可以等待多个文件描述符,减少了平均等待时间2.客户越来越多时,减轻了进程调度的压力(相较于多进程多线程服务器)select缺点:1.能监听的文件描述符有上限,这个上限是由fd_set决定的。2.它返回的只是就绪事件的个数,要判断是那个事件满足,需要遍历文件描述符。3.select监听的集合是输

2017-06-12 22:34:59 2774

原创 I/O多路复用之poll

pollpoll和select类似,不过在一些方面改善了select的弊端。它也是在指定的时间进行轮询文件描述符,查看是否有就绪时间发生。和上次一样,我们先来看一下poll系统调用。 int poll(struct pollfd *fds, nfds_t nfds, int timeout);11fds是一个pollfd的结构体数组。struct pollfd

2017-06-12 16:10:35 268

原创 I/0多路复用之epoll

epoll介绍epoll的实现和select与poll的实现有很大的差异,epoll不像select和poll一样通过一个系统调用来完成任务,通过一组函数,epoll把用户关心的文件描述符的事件放在内核的一个事件表中,这样就不用每次都进行向内核传递文件描述符了。epoll使用一个额外的文件描述符来表示内核的事件表,所以这里第一个函数epoll_create就是做这个的。epol

2017-06-12 14:41:02 304

原创 mmap实现多进程对大文件拷贝

实现文件多进程拷贝。假设有一个超大文件,需对其完成拷贝工作。为提高效率,可采用多进程并行拷贝的方法来实现。假设文件大小为len,共有n个进程对该文件进行拷贝。那每个进程拷贝的字节数应为len/n。但未必一定能整除,我们可以选择让最后一个进程负责剩余部分拷贝工作。可使用len % (len/n)将剩余部分大小求出。为降低实现复杂度,可选用mmap来实现源、目标文件的映射,通过指针操作内存地址

2017-06-11 22:50:28 1167 1

原创 Linux 多线程同步之哲学家用餐问题分析

有五个哲学家公用一张餐桌,分别坐在周围的五张椅子上,在餐桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和用餐。平时,一个哲学家进行思考,饥饿时便试图拿取其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐,进餐完毕,放下筷子继续思考。思路:选用互斥锁mutex,如创建5个, pthread_mutex_t m[5];模型抽象: 5个哲学家 --> 5个线程;5支筷子 -

2017-06-11 19:55:07 2814 1

原创 I/O多路复用之select函数

select介绍我们先来看一下select的接口。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);1234512345从上面的这些接口我们应该能有写认识,首先我么来看s

2017-06-07 16:24:46 392

原创 守护进程的实现

守护进程也叫做精灵进程,是运行在后台的一种特殊的进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。生存周期长,它们常常在系统引导装入的时候启动,仅仅在系统关闭的时候才终止。因为它们没有控制终端,所以说它们是在后台运行的。很多服务器的应用都和守护进程相关守护进程的特点: 守护进程启动后没有控制终端,不能直接和用户交互。 守护进程不受用户登录注销的影响。只受开机关机的

2017-06-04 17:20:03 495

原创 使用socketpair⽤来创建双向通信的管道

#include#include#include#include#include#includeint main(){ pid_t pid; int fd[2]; socketpair(AF_UNIX,SOCK_STREAM,0,fd); pid = fork(); if(pid < 0) { perror("fork"); exit(1); } els

2017-06-02 23:54:32 348

原创 socket之TCP多线程客户服务器编程

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include#include#includestatic void usage(const char *str){ printf("Usage:%s [IP][PORT]\n",str);}static int start

2017-06-02 23:46:17 426

原创 socket之tcp多进程客户服务器编程

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include#includestatic int startup(const char *_ip,int _port){ int sock = socket(AF_INET,SOCK_STREAM,0); if(sock < 0

2017-06-02 23:34:33 392

原创 socket编程之udp客户服务器

实现基于udp的C/S服务模型,服务器将客户端的输入回显给客户端。服务器:#include#include#include#include#include//#include#includestatic void usage(const char * str){ printf("Usage:%s [IP] [PORT]\n",str);}// ./server

2017-06-02 23:23:27 384

原创 socket编程之TCP单进程客户服务器

实现基于TCP的C/S服务模型,服务器将客户端的输入回显给客户端。服务器代码:#include#include#include#include#include#include#include#includevoid usage(const char *str){ printf("%s [IP][PORT]\n",str);}//./serv 127.0.0.

2017-06-02 23:07:11 1268

空空如也

空空如也

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

TA关注的人

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