![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux网络编程
网络编程
麻子来了
这个作者很懒,什么都没留下…
展开
-
system v共享内存与信号量综合
关于SystemV共享内存和信号量的知识已经学过了,这次主要是综合这两者来解决一个问题达到灵活运用的目的,下面开始:生产者消费者问题:关于什么是“生产者消费者”,应该都比较清楚,这里还是先贴上百度百科对它的描述:下面用图来说明一下该问题:以上就是生产者消费者从逻辑上的一个解决方案,从中可以看到这是互斥跟同步相结合的例子,下面则用所画的这些模型来实现一下shmf...转载 2020-03-15 12:18:38 · 444 阅读 · 0 评论 -
常见并发服务器实现方案分析
首先,我们要清楚,什么是并发?什么是多线程?为什么需要多线程?为什么需要并发服务器?为什么要使用多线程技术为什么多线程会提高响应速度?我们知道,线程一般分为:I/O线程(这里特指网络I/O,每个reactor就是一个IO线程);计算线程,==》耗费cpu;第三方库所用线程,如logging,又比如database//这些操作不应该放在计算线程中执行。例如记录日志,多个线程写日志,由...原创 2020-03-15 09:56:37 · 717 阅读 · 0 评论 -
System V信号量解决哲学家就餐问题
一、哲学家就餐问题:五个哲学家围在一个圆桌就餐,每个人都必须拿起两根筷子才能用餐,当每个人都先拿起左筷子,等待右筷子的时候就会造成死锁。解决方案仅当一个哲学家两边筷子都可用时才允许他拿筷子就餐。二、代码:#include<stdio.h>#include<stdlib.h>#include<sys/ipc.h>#include&...原创 2020-03-08 18:14:33 · 1579 阅读 · 0 评论 -
System V信号量
一、信号量具体函数使用:信号量API接口解析二、信号量函数使用示例:#include <sys/types.h>#include <unistd.h>#include <sys/ipc.h>#include <sys/sem.h>#include <errno.h>#include <stdio.h>...原创 2020-03-08 12:37:14 · 526 阅读 · 0 评论 -
System V共享内存
共享内存:是最快的IPC形式,一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递不再涉及到内核,不用通过执行进入内核的系统调用来传递彼此的数据。mmap函数:功能:将文件或者设备空间映射到共享内存区。void*mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);参数addr:...原创 2020-03-01 16:14:21 · 262 阅读 · 0 评论 -
System V消息队列
一、进程间通信方式:1管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2信号量(semophore):信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。3消...原创 2020-02-23 18:46:31 · 394 阅读 · 0 评论 -
SOCKET网络编程五:IO多路复用epoll
一、关于select、poll、epoll这三者使用、对比介绍这篇:网络编程--IO多路复用之select,poll和epoll详解二、poll的使用和上篇的select大同小异:int main(void){ //当客户端结束时,服务器还维持一个僵尸进程 signal(SIGCHLD, SIG_IGN);//使用signal忽略SIGCHLD信号(第一种方法) /*sign...原创 2020-02-16 11:56:22 · 466 阅读 · 0 评论 -
SOCKET网络编程四:SELECT单进程并发服务器
五种IO模型:阻塞IO:recv接收缓冲区有数据后,就会解除阻塞。非阻塞IO:忙等待fcntl(fd,F_SETFL,flag|O_NONBLOCK)IO复用(select和poll)信号驱动IO异步IO...原创 2020-02-15 16:16:35 · 729 阅读 · 0 评论 -
SOCKET网络编程三:TCP粘包问题处理
TCP是字节流协议,原始数据之间是没有边界的。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。所谓粘包问题本质还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。粘包问题解决方案:0、发送和接收都定义固定大小。1、发送方接收方都协商...原创 2020-02-13 21:05:08 · 427 阅读 · 1 评论 -
SOCKET网络编程二:点对点聊天程序
1、要进行点对点聊天,首先需要既能发送,又能接收,如果发送接收放在一个进程有可能导致数据包丢失,因此需要新开一个进程,一个进程在套接字上接收,一个进程在套接字上发送。2、父进程和子进程是可以共享文件描述符的。3、fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值: 1)在父进程中,fork返回新创建子进程的进程ID; 2)在子进程中,f...原创 2020-02-13 13:05:20 · 1491 阅读 · 0 评论 -
SOCKET网络编程一:回射客户服务器
socket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信一、基础TCP客户端服务器模型(C/S模型)服务端:Socket创建套接字==》 安装一部话机 Bind绑定==》绑定一个电话号码 Listen监听 Accept等待对方连接==》等待对方电话拨打过来,如果没有对方电话拨打过来...原创 2020-02-11 16:18:40 · 616 阅读 · 2 评论 -
一台主机,至多可以开启多少个线程
最近在做服务器压力以及并发测试,因为是C/S模型,所以需要自己模拟客户端,需要运行大量的线程模拟并发,于是就碰到这个问题了。另一个原因是,我在服务器中创建了一个线程池,我很想知道线程池的个数上限,从而更好的制定线程池动态增减的方法,所以也做了同样的测试。首先分析32位linux系统对32位系统来说,理论上的寻址范围是4G(2^32),但实际系统还要预留系统空间用于自身管理,一般来说...转载 2020-02-09 15:28:24 · 8649 阅读 · 1 评论