![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
文章平均质量分 59
吴刀钓鱼
以教员为榜样,不卑不亢,做好当下的事。
展开
-
多线程与并发服务器设计
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 1223 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
System V消息队列
1.什么是消息队列 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值 消息队列也有管道一样的不足,就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列总的字节数是有上限的(MSGMNB),系统上消息队列的总数也有一个上限(MSGMNI) cat /proc/sys/kernel/msgmax cat /proc/sys/kernel/msgmnb cat /proc/sys/kernel/msgmni 2原创 2021-04-01 11:33:58 · 219 阅读 · 0 评论 -
进程间通信概念
进程间通信概念 1.进程同步 进程同步指的是多个进程需要相互配合共同完成一项任务。 2.进程互斥 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系称为进程的互斥。 系统中某些资源只允许一个进程使用,称这样的资源为临界资源或互斥资源。 在进程中涉及到互斥资源的程序段叫临界区。 3.进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源 通知事件:一个进程需要向另一个或一组进程发送消息,通知它或它们发生了某种事件(原创 2021-04-01 08:38:03 · 195 阅读 · 0 评论 -
线程基本函数原型
1.创建一个新线程 1.1函数原型 int pthread_creat(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); 1.2参数 thread:返回新创建的线程ID attr:设置线程的属性,attr为NULL表示使用默认属性 start_routine:线程启动后要执行的函数地址 arg:传给线程启动函数的参数 1.3返回值 成功返回0,失败返回错误码。 传统的一些原创 2021-03-27 23:53:28 · 479 阅读 · 0 评论