Linux网络编程
文章平均质量分 83
先是linux下网络编程相关知识,之后是对整个muduo的学习过程进行理解和总结,作为找工作时的项目支撑和知识点线索串
KuoGavin
这个作者很懒,什么都没留下…
展开
-
bind()系统调用的用处
关于绑定IP地址与端口号的见解转载 2021-08-31 17:53:15 · 359 阅读 · 0 评论 -
Linux五种IO模型
为了更好的理解五种IO模型,我们先来说一下几个概念:同步,异步,阻塞和非阻塞。相关内容也可见:Linux系统中的I/O同步和异步 这两个概念与消息的通知机制有关。 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。比如,调用readfrom系统调用时,必须等待IO操作完成才返回。 异步 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。比如:调用aio_read系转载 2021-08-01 20:18:32 · 172 阅读 · 0 评论 -
Linux相关问题整理
文章目录Linux能同时启动多少个线程多线程是否可以提高并发度多线程是否可以提高吞吐量多线程如何让I/O和计算重叠,降低迟延(latency)线程池大小如何选择线程分类Linux能同时启动多少个线程对于32-bit的Linux,一个进程的地址空间是4G,其中用户态能访问3G左右,而一个线程的默认栈(stack)大小是10M,所以一个进程大约最多能同时启动300个线程左右;多线程是否可以提高并发度如果指的是“并发连接数”,不能(原因见下),(若是指并发处理数,则这是由CPU的核数决定的,与线程个原创 2021-07-23 19:20:49 · 101 阅读 · 0 评论 -
epoll与select、poll区别
相比于select与poll,epoll最大的好处在于它不会随着监听fd数目的增加而降低效率。epoll最开始使用的是hash构建监听数据结构,现下使用红黑树来构建监听数据结构,和监听事件的数目是log2nlog_2nlog2n的;select和poll则使用轮询的方法(两次遍历,先是select和poll函数阻塞过程中一次遍历,返回后在用户代码中需再一次遍历处理到达的事件),即使使用了自定义数组存储要监听的文件描述符,轮询时间还是和要监听的时间数目是线性的);epoll的实现是基于回调的,如果f.原创 2021-07-09 15:36:39 · 278 阅读 · 0 评论 -
close_on_exec选项:FD_CLOEXEC(fcntl)、O_CLOEXEC(open) 和 EPOLL_CLOEXEC(epoll_createl)
close_on_exec解决的问题类型:我们经常会碰到一个进程需要fork出子进程的情况,而且子进程很可能会继续exec新的程序。这就不得不提到如何妥善处理好子进程中无用文件描述符的问题。fork函数的使用本不是这里讨论的话题,但必须提一下的是:子进程以写时复制(COW,Copy-On-Write)方式获得父进程的数据空间、堆和栈副本,这其中也包括文件描述符。刚刚fork成功时,父子进程中相同的文件描述符指向系统文件表中的同一项(这也意味着他们共享同一文件偏移量)。接着,一般子进程会调用exec转载 2021-07-09 12:00:34 · 892 阅读 · 0 评论 -
进程、线程、协程的区别和联系
文章目录(一)进程(二)线程(三)进程和线程直接的区别和联系(四)进程/线程之间的亲缘性(五)进程池与线程池(六)协程(一)进程进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。 进程虚拟内存空间 进程状态转换图 虚拟内存空间相关知识见:虚拟内存(Virtu原创 2021-06-26 10:29:12 · 354 阅读 · 0 评论 -
I/O多路复用之——背景知识
文章目录用户空间和内核空间socket文件描述符fd和套接字I/O操作是什么基于socket的I/O是什么类型★网络I/O阻塞出现的原因怎样提高单个网络I/O利用率用户空间和内核空间操作系统根据寻址空间,划分为内核空间与用户空间。 对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。Linux 操作系统将这4个G的寻址空间中高位1G字节为内核使用,就是内核空间;低位3G字节位用户使用 ,也就用户空间。为啥要设置这两个空间?在 CPU 的所有指令中,有原创 2021-06-24 23:17:13 · 392 阅读 · 3 评论 -
I/O多路复用之——select
假如能够预先传入一个 socket 列表(多个套接字),如果列表中的 socket都没有数据,挂起进程,直到有一个 socket 收到数据,唤醒进程。 这种方法很直接,也是 select 的设计思想。在下边的代码中,先准备一个数组 fds ,让 fds 存放着所有需要监视的 socket。然后调用 select,如果 fds 中的所有 socket 都没有数据,select 会阻塞,直到有一个 socket 接收到数据,select 返回,唤醒进程。用户可以遍历 fds,通过 FD_ISSET 判断具体哪个原创 2021-06-24 22:28:48 · 643 阅读 · 1 评论 -
I/O多路复用之——epoll原理详解及epoll反应堆(Reactor)模型
文章目录(一)epoll 使用场景(二)epoll2.1 epoll 原理2.2 epoll 编程流程(三)epoll 两种触发模式(四)epoll 反应堆原理(Libevent库核心思想)(五)select, poll, epoll 的对比(一)epoll 使用场景epoll之所以是epoll,是因为它是event事件驱动的。你的程序通过多个线程来处理大量的网络连接。如果你的程序只是单线程的那么将会失去epoll的很多优点。并且很有可能不会比poll更好;你需要监听的套接字数量非常大(至少1原创 2021-06-25 22:17:51 · 1853 阅读 · 1 评论 -
do{...}while(0)的用法
文章目录1. 导入2. 实现局部作用域的定义宏3. 替代goto语句1. 导入第一次见到 do{…}while(0)是在学习libevent的时候,看到里面有很多类似:#define TT_URI(want) do { \ char *ret = evhttp_uri_join(uri, url_tmp, sizeof(url_tmp)); \ tt_want(ret != NULL); \ tt_want(ret == url_tmp); \ if (str转载 2021-06-25 17:34:45 · 121 阅读 · 2 评论 -
大并发服务器所遇问题和简单应对框架思路
服务器设计目标- 高性能(High Performance, HP);- 高可用(High Availability, HA);- 伸缩性(Scalability);分布式设计问题- 负载均衡;- 分布式存储;- 分布式计算;原创 2021-06-03 23:57:21 · 292 阅读 · 1 评论