epoll

Linux, sockets, non-blocking connect

我的梦境 提交于 2019-11-30 03:39:02
I want to create a non-blocking connect. Like this: socket.connect(); // returns immediately For this, I use another thread, an infinite loop and Linux epoll. Like this(pseudocode): // in another thread { create_non_block_socket(); connect(); epoll_create(); epoll_ctl(); // subscribe socket to all events while (true) { epoll_wait(); // wait a small time(~100 ms) check_socket(); // check on EPOLLOUT event } } If I run a server and then a client, all it works. If I first run a client, wait a some small time, run a server, then the client doesn't connect. What am I doing wrong? Maybe it can be

一线大厂php高级面试题_高级php面试题总结分享

人盡茶涼 提交于 2019-11-30 03:15:47
最近一段时间, 在北京参加30多家大中小互联网公司面试, 其中有百度, 腾讯, 蘑菇街, 滴滴, 美丽说, 互联网金融等公司, 面试过程也是学习过程, 从中发现这些知识点范围是固定的, 或者说如果你细心准备, 大概考点都差不多吧, 下面我会把这些知识点范围总结下, 仅仅是问题,没有答案. 同时也欢迎你在下面评论中进行补充. 如果列出问题,你能会80%以上, 我想你能够拿到每月25k以上的薪水. 一 算法 基本排序算法要会写,时间复杂度要会推算, 主要是冒泡排序, 快速排序, 选择排序. 查找算法,要会写二分查找法, 实际场景要会应用. 实例算法思路要明白,基本算法看多了, 我觉得是几种思路的变换, 需要自己领悟. 面试中考过: 猴子选大王 斗地主项目设计 实现随机函数 字符串中元素各种变形查找 123456 六个数放到三角形三个顶点及中点上,使每条边上的数字和相等 一个超大文件里面存放关键,统计每个关键的个数, 问如何实现 一个10G的文件,里面存放关键字, 但内存只有10M, 问如何实现统计, 出现关键字次数最高的前100个 实现单链表与双链表 实现有权重的随机算法 应该就这么多,其他想不起来, 做这些算法需要冷静分析下, 不要轻易说no 二 php 知识 说说php的魔术变量, 要能全部说出来. php的设计模式, 要能清晰说出单例, 工厂, 注册模式的实际应用.

about epoll_ctl()

给你一囗甜甜゛ 提交于 2019-11-30 03:12:03
问题 when using epoll_ctl(), I found that the third parameter "fd" is another file descriptor besides the epoll file descriptor "epfd". And I saw an example like this: event.data.fd = sfd; //sfd is a fd for listening event.events = EPOLLIN | EPOLLET; s = epoll_ctl (efd, EPOLL_CTL_ADD, sfd, &event); As I saw, file descriptor in event.data.fd is the same as the third parameter in epoll_ctl, why need to pass this descriptor twice? is there any difference? 回答1: Actually you don't have to set event

Is epoll thread-safe?

╄→гoц情女王★ 提交于 2019-11-29 20:56:12
There are two functions in epoll: epoll_ctl epoll_wait Are they thread-safe when I use the same epoll_fd? What will happen if one thread calls epoll_wait and others call epoll_ctl at the same time? It is thread-safe, but there isn't much documentation that explicitly states that - see http://linux.derkeiler.com/Mailing-Lists/Kernel/2006-03/msg00084.html BTW, you can also have multiple threads waiting on a single epoll_fd, but in that case it can get a bit tricky (i.e. you might want to use edge-triggered (EPOLLET) or oneshot mode (EPOLLONESHOT) - see http://linux.die.net/man/2/epoll_ctl ) 来源:

What's the difference between event-driven and asynchronous? Between epoll and AIO?

∥☆過路亽.° 提交于 2019-11-29 19:58:10
Event-driven and asynchronous are often used as synonyms. Are there any differences between the two? Also, what is the difference between epoll and aio ? How do they fit together? Lastly, I've read many times that AIO in Linux is horribly broken. How exactly is it broken? Thanks. c-smile Events is one of the paradigms to achieve asynchronous execution. But not all asynchronous systems use events. That is about semantic meaning of these two - one is super-entity of another. epoll and aio use different metaphors: epoll is a blocking operation ( epoll_wait() ) - you block the thread until some

阿里开发者招聘节 | 2019阿里巴巴技术面试题分享:20位专家28道题

瘦欲@ 提交于 2019-11-29 19:39:42
为帮助开发者们提升面试技能、有机会入职阿里, 云栖社区 特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案将在专辑结束后统一汇总分享, 点此进入答题并围观他人答案 )。并通过这些笔试真题开放阿里巴巴工作机会,让更多的开发者加入到阿里这个大平台。 这一次,不仅是知识的收获,还将间接地与技术大牛们做了直观的沟通,了解他们的出题思路与考察要点,并加以消化吸收,这对自己技术能力本身就是一种极大的提升。走上编程之路,不断丰富自己方能与世接轨,努力做最优秀的自己。 5月21日,我们给开发者的第28道面试题。 28.请评估一下程序的执行结果? public class SynchronousQueueQuiz { public static void main(String[] args) throws Exception { BlockingQueue<Integer> queue = new SynchronousQueue<>(); System.out.print(queue.offer(1) + " "); System.out.print(queue.offer(2) + " "); System.out.print(queue.offer(3) + " "); System.out.print(queue

nginx 2配置文件

点点圈 提交于 2019-11-29 19:34:30
Nginx主配置文件位置一般放在 /usr/local/nginx/conf/nginx.conf 配置语句格式为 “关键字 值;” ( 例:keyname key; ) 在http内可以有多个server 在server内可以有多个loctation 主配置文件包括 1 全局配置 (在括号之外的内容) user nginx [nginx]; 运行用户(nginx组可以不用写) worker_processes 2; 指定工作进程数量 (一般都是按照核心数指定一比一) worker_cpu_affinity 01 10; (指定CUP分配。如果四核0001 0010 0100 1000) worker_rlimit_nofile 102400; (指定Nginx一个进程打开的最多文件数目,理论值应该是最多打开文件数【ulimit -n查看,修改:ulimit -n 新值】【ulimit -u 最大用户进程数,修改:ulimit -u 新值】这两个值最好一样,现在是临时修改,永久修改把这两条命令放在/etc/profile内) error_log logs/error.log; (错误日志存放位置) pid logs/nginx.pid; (进程PID存放位置) 2 I/O事键 (events括号内的内容) use epoll; (使用epoll模型,对于2.6以上的内核

IO模型(epoll)--详解-03

淺唱寂寞╮ 提交于 2019-11-29 15:37:31
写在前面   epoll是开发linux高性能服务器的必备技术至,epoll本质,是服务端程序员的必须掌握的知识。 七、epoll的原理和流程   本节会以示例和图表来讲解epoll的原理和流程。 创建epoll对象   如下图所示,当某个进程调用epoll_create方法时,内核会创建一个eventpoll对象(也就是程序中epfd所代表的对象)。eventpoll对象也是文件系统中的一员,和socket一样,它也会有等待队列。内核创建eventpoll对象   创建一个代表该epoll的eventpoll对象是必须的,因为内核要维护“就绪列表”等数据,“就绪列表”可以作为eventpoll的成员。 维护监视列表   创建epoll对象后,可以用epoll_ctl添加或删除所要监听的socket。以添加socket为例,如下图,如果通过epoll_ctl添加sock1、sock2和sock3的监视,内核会将eventpoll添加到这三个socket的等待队列中。添加所要监听的socket   当socket收到数据后,中断程序会操作eventpoll对象,而不是直接操作进程。 接收数据   当socket收到数据后,中断程序会给eventpoll的“就绪列表”添加socket引用。如下图展示的是sock2和sock3收到数据后,中断程序让rdlist引用这两个socket

IO模型(epoll)--详解-02

别说谁变了你拦得住时间么 提交于 2019-11-29 15:37:02
写在前面   从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,大部分游戏服务器都使用到这一多路复用技术。文章核心思想是:要让读者清晰明白EPOLL为什么性能好。 四、内核接收网络数据全过程   这一步,贯穿网卡、中断、进程调度的知识,叙述阻塞recv下,内核接收数据全过程。   如下图所示,进程在recv阻塞期间,计算机收到了对端传送的数据(步骤①)。数据经由网卡传送到内存(步骤②),然后网卡通过中断信号通知cpu有数据到达,cpu执行中断程序(步骤③)。此处的中断程序主要有两项功能,先将网络数据写入到对应socket的接收缓冲区里面(步骤④),再唤醒进程A(步骤⑤),重新将进程A放入工作队列中。   唤醒进程的过程如下图所示。   以上是内核接收数据全过程     这里留有两个思考题,大家先想一想。     其一,操作系统如何知道网络数据对应于哪个socket?因为一个socket对应着一个端口号,而网络数据包中包含了ip和端口的信息,内核可以通过端口号找到对应的socket。当然,为了提高处理速度,操作系统会维护端口号到socket的索引结构,以快速读取。     其二,如何同时监视多个socket的数据?是多路复用的重中之重,是本文后半部分的重点! 五、同时监视多个socket的简单方法   服务端需要管理多个客户端连接

IO模型(epoll)--详解-01

主宰稳场 提交于 2019-11-29 15:35:32
写在前面   从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。   本文会从网卡接收数据的流程讲起,串联起CPU中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、select到epoll的进化过程;最后探究epoll的实现细节。目录: 一、从网卡接收数据说起 二、如何知道接收了数据? 三、进程阻塞为什么不占用cpu资源? 四、内核接收网络数据全过程 五、同时监视多个socket的简单方法 六、epoll的设计思路 七、epoll的原理和流程 八、epoll的实现细节 九、结论 一、从网卡接收数据说起   下图是一个典型的计算机结构图,计算机由CPU、存储器(内存)、网络接口等部件组成。了解epoll本质的第一步,要从硬件的角度看计算机怎样接收网络数据。    下图展示了网卡接收数据的过程。在①阶段,网卡收到网线传来的数据;经过②阶段的硬件电路的传输;最终将数据写入到内存中的某个地址上(③阶段)。这个过程涉及到DMA传输、IO通路选择等硬件有关的知识,但我们只需知道:网卡会把接收到的数据写入内存。 二、如何知道接收了数据?   了解epoll本质的第二步,要从CPU的角度来看数据接收。要理解这个问题,要先了解一个概念——中断。   计算机执行程序时