自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴刀钓鱼的博客

数据结构

  • 博客(20)
  • 收藏
  • 关注

原创 多线程与并发服务器设计

1.循环式/迭代式(iterator)服务器无法充分利用多核CPU,不适合执行时间较长的服务2.并发式服务器one connection per process/one connection per thread适合执行时间比较长的业务3.prefork or pre thread惊群现象4.反应式(reactive)服务器(reactor模式)并发处理多个请求,实际上是在一个线程中完成。无法充分利用多核CPU不适合执行时间比较长的服务,所以为了让客户感觉是在“并发”处

2021-04-05 19:20:12 121

原创 epoll使用详解

1.epoll函数#include <sys/epoll.h>int epoll_creat(int size);int epoll_creat1(int flags);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);typedef u

2021-04-04 10:17:52 158

原创 poll使用详解

1.poll函数#include <poll.h>int poll(struct pollfd *fds, nfds_t nfds, int timeout);struct pollfd{ int fd; //file descriptor short events; //requested events short revents; //returned events};//fd:输入输出参数//nfds:文件描述符个数//timeout:超时时间1.1 poll使

2021-04-04 00:56:02 1224

原创 POSIX条件变量

1.什么是条件变量当一个线程互斥地访问某个变量的时候,它可能发现在其它线程改变状态之前,它什么也做不了例如一个线程访问队列时,发现对列为空,它只能等待,直到其它线程将一个节点添加到队列中。这种情况就需要条件变量。2.条件变量函数pthread_cond_init //初始化pthread_cond_destroy //销毁pthread_cond_wait //在一个条件之上等待pthread_cond_signal //条件满足时向一个等待线程发起通知pthread_cond_broa

2021-04-02 11:19:53 141

原创 POSIX信号量与互斥锁

1.POSIX信号量相关函数//有名信号量,可用于不同进程间的多个线程通信sem_open();sem_close();sem_unlink();//无名信号量sem_init();sem_destroy();//PV原语操作sem_wait();sem_post();2. POSIX互斥锁//无名pthread_mutex_init();pthread_mutex_lock();pthread_mutex_unlock();pthread_mutex_destroy(

2021-04-02 10:22:57 161

原创 POSIX共享内存

1.POSIX共享内存相关函数1.1 shm_open函数功能,用来创建或打开一个共享内存对象原型int shm_open(const char *name, int oflag, mode_t mode);//name:共享内存对象的名字//oflag:与open函数类似,可以是O_RDONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_TRUNC等。//mode:此参数总是需要设置,如果oflag没有指定了O_CREAT,可以指定为0返回值,成功返回非负整数文

2021-04-01 22:15:59 140

原创 POSIX消息队列

1.POSIX消息队列相关函数1.1 mq_open函数功能,用来创建和访问一个消息队列原型mqd_t mq_open(const char *name, int oflag);mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);//name:某个消息队列的名字,必须以/打头,并且后续不能有其它/,长度不超过NAME_MAX//oflag:与open函数类似,可以是O_RDONLY、O_

2021-04-01 21:41:13 129

原创 System V信号量

1.信号量集结构struct semid_ds{ struct ipc_perm sem_perm; time_t sem_otime; time_t sem_ctime; unsigned short sem_nsems;}2.信号量集函数2.1 semget函数功能,用来创建和访问一个信号量集原型int semget(key_t key, int nsems, int semflg);//key:信号集的名字//nsems:信号集中信号量的个数/

2021-04-01 16:50:33 64

原创 System V共享内存

1.什么是共享内存共享内存区是最快的IPC形式。一旦这样的内存映射到共享它瑞典进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。1.2 mmap函数功能,将文件或者设备空间映射到共享内存区原型void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);//addr:要映射的起始地址,通常指定为NULL,让内核自动选择//len:

2021-04-01 15:24:51 91

原创 System V消息队列

1.什么是消息队列消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI)cat /proc/sys/kernel/msgmaxcat /proc/sys/kernel/msgmnbcat /proc/sys/kernel/msgmni2

2021-04-01 11:33:58 221

原创 进程间通信概念

进程间通信概念1.进程同步进程同步指的是多个进程需要相互配合共同完成一项任务。2.进程互斥由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系称为进程的互斥。系统中某些资源只允许一个进程使用,称这样的资源为临界资源或互斥资源。在进程中涉及到互斥资源的程序段叫临界区。3.进程间通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源通知事件:一个进程需要向另一个或一组进程发送消息,通知它或它们发生了某种事件(

2021-04-01 08:38:03 196

原创 线程基本函数原型

1.创建一个新线程1.1函数原型int pthread_creat(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);1.2参数thread:返回新创建的线程IDattr:设置线程的属性,attr为NULL表示使用默认属性start_routine:线程启动后要执行的函数地址arg:传给线程启动函数的参数1.3返回值成功返回0,失败返回错误码。传统的一些

2021-03-27 23:53:28 485

原创 C++成员函数和成员变量小记

什么是成员函数和成员变量成员函数和成员变量从属于类,不能单独存在,成员函数可以放在类当中定义,也可以放在类外面定义。普通成员函数和成员变量#include <iostream>using namespace std;class Test{public: void member_fun() { cout << "I am a member fun ..." << endl; }};int main(){

2021-03-26 00:16:10 276

原创 C++析构函数小记

什么是析构函数在对象的生命周期结束前做一些“清理现场”的工作。如何使用析构函数析构函数示例#include <iostream>using namespace std;class Test{public: ~Test() { cout << "~Test ..." << endl; }};int main(){ Test a; return 0;}运行结果:声明的对象a在生命期结束

2021-03-24 21:28:34 83

原创 C++赋值函数小记

什么是赋值函数赋值函数是运算符"="重载,形式如下:Test & operator=(const Test &obj);为什么需要重载赋值函数采用默认的赋值函数,若成员变量中有指针类型,赋值的时候需要进行深拷贝,默认的赋值函数只能浅拷贝,会导致两个对象的成员变量指针指向同一块内存。默认赋值函数示例#include <iostream>using namespace std;class Test{public: Test() {

2021-03-24 20:40:12 318

原创 C++拷贝构造函数小记

什么是拷贝构造函数构造函数的一种形式,只有一个参数,参数类型是本类的引用。如果类中没有声明拷贝构造函数,代码编译时编译器会自动生成。拷贝构造函数的作用默认的拷贝构造函数,其作用是把源对象一个字节一个字节的拷贝到目标对象。为什么需要拷贝构造函数默认的拷贝构造函数只实现了浅拷贝,如果类中有指针类型的成员变量,拷贝后会导致源对象和目标对象的指针成员变量指向同一块内存,不符合拷贝的原则。如何使用拷贝构造函数已存在对象初始化新创建的对象#include <iostream>using

2021-03-23 23:49:52 123

原创 C++构造函数小记

什么是构造函数每一个类创建对象的时候,此时会调用构造函数对类内的成员进行初始化。下面的Test()即为类Test的一个构造函数class Test{public: Test();};构造函数特点与类的名称相同类中没有指定声明构造函数,编译器会自动生成没有返回值可以重载声明两个构造函数#include <iostream>using namespace std;class Test{public: Test() { co

2021-03-23 00:07:16 276

原创 半年转行路

自去年入职到现在已有半年,就这么开始了码农生涯。半年以来,总的学习、工作内容主要有以下几个部分。1.大部分时间用以学习业务内容。2.学习掌握C的语言特性,从最开始的超级烂,到现在看起来过得去的水平,渐渐明白了指针跑飞、C内存地址的种类、字节对齐等等,后续继续加强。3.利用python写了一个脚本,第一次尝试写了这么大量的代码,这应该就是我的第一次编程经验了。花了将近两个月的时间撸了五六千行...

2020-01-17 21:39:50 108

原创 线性表顺序存储结构之插入、删除、修改和查找操作,还有你想知道的动态分配线性表存储容量操作

代码结构:#define SUCCESS 0#define FAILURE -1int ListInsert(SeqList *L, int insertPosition, const ElemType &e){ //检查数组是否存在 if (L == NULL) { return FAILURE; } //检查插入位置是否...

2019-08-30 23:23:34 1111

原创 线性表顺序存储结构

代码://线性表的存储结构代码#define MAXSIZE 20 //最大存储容量typedef int ElemType; //数据存储类型,此处定义为inttypedef struct SeqList { ElemType data[MAXSIZE]; //数组存储数据元素,最大容量为MAXSIZE int length; /...

2019-08-27 23:45:42 405

空空如也

空空如也

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

TA关注的人

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