Skip to content

Commit 78b8e64

Browse files
committed
add epoll/design-pattern related questions
1 parent 24c6bc3 commit 78b8e64

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

network.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
// UDP
1616

1717
1、UDP 可以使用connect吗?
18+
(tips:可以,UDP使用connect有一下几个作用
19+
1、完成一对一的端到端通信
20+
2、实现细节上填充sock结构中的目的ip和port,这样后续就可以像TCP那样使用send/recv接口
21+
3、UDP的connect不涉及数据通信,即没有实际的数据发送逻辑)
1822

1923
2、UDP recvfrom 100字节,这时来了个 150字节的数据包,会发生什么? 如果来了一个 80字节的数据包呢?
2024

@@ -57,6 +61,10 @@
5761
7、epoll poll select 区别与联系?
5862

5963
8、epoll 中 LT ET 区别,使用场景?
64+
(tips:ET中,如果没有read socket到 EAGAIN,有可能导致整个处理过程阻塞,
65+
服务端因为没有收到足够的数据,还在等(事实上已经有足够的数据了),
66+
而客户端发送了足够的数据,等待服务端回复;
67+
使用ET触发的epoll需要设置socket为nonblocking 和 每次read 到 EAGAIN)
6068

6169
9、EPOLL_ONESHOT 应用于哪种场景,作用是什么?
6270

@@ -393,6 +401,9 @@
393401

394402
122、SOCK_REUSESOCK可以用在Unix Domain socket之上吗?
395403
(tips:不能,man 手册上说 SOCK_REUSEPORT应用于AF_INET和AF_INET6)
404+
405+
123、什么时候socket fd会返回可读事件?
406+
(tips:这里需要明确的是,不是有数据就可读,有一个水位的东西需要关注)
396407

397408

398409
// http
@@ -543,3 +554,14 @@
543554
包转发理论值为 portNum*100M/84,84=64+12+8,网络上最小的数据包
544555
实际值应该小于这个值;
545556
buffer的作用在于应对突发流量)
557+
558+
37、reactor 和 proactor 的关系?
559+
(tips:设计模式上,基本分为两种,即thread-based和event-driven,前者的典型代表是apache,
560+
简单,但是可扩展性不强,线程间的context switch多,受限于系统可以运行的现场数量。
561+
更早的版本基于fork,进程创建的开销更高;
562+
reactor 和 proactor本身都是event-driven模型,但是两者的区别在于注册处理的事件源不同,
563+
reactor 使用 同步非阻塞的 分发器 串行化的处理socket的可读请求,各个handler需要提前注册;
564+
proactor 则使用 异步非阻塞 的分发器 异步的处理事件完成请求。
565+
这了强调 非阻塞 是因为,如果采用阻塞 system call,则整个server都会block,
566+
无法执行其他逻辑,效率较低,还涉及睡眠唤醒等逻辑,
567+
常见的Nginx Redis Node都采用的 Reactor,分发器则为系统提供的 epoll 等)

0 commit comments

Comments
 (0)