Skip to content

Commit a6d7566

Browse files
committed
add c10k & c10m questions
1 parent 772e3c4 commit a6d7566

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

network.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,3 +506,18 @@
506506
(tips:1、首先根据ip 和 路由表决定数据从哪个网卡发出
507507
2、如果ARP缓存中没有ip对应的MAC,则发送ARP广播到路由器
508508
3、路由器会返回自己的MAC地址)
509+
510+
33、什么是C10K问题,解法是?
511+
(tips:字面上解释C10K就是可以支持并发10K个连接;早期的Apache采用线程模型,即一个连接一个线程处理,
512+
这就限制了并发连接数,当并发数量增加后,受限于内核,系统性能下降。
513+
解决方法:采用epoll接口实现事件驱动模型,请求的处理时间复杂度不再是O(n^2),
514+
之前是O(n^2)是因为select/poll等接口的定义需要遍历两遍socket列表)
515+
516+
34、什么是C10M问题,解法是?
517+
(tips:C10M 相比于 C10K 不仅仅是并发连接数上的增加,
518+
还有延迟,数据传输速度上更高的要求;现在的内核数据面和控制面是统一的,
519+
这样的模式不利于高速数据传输,即常说的网络栈太长,也即DPDK等提出的原因
520+
C10M 涉及下面几个方面的扩展
521+
1、Packet层面,Packet bypass 内核,让应用更快速的接收到数据,需要自己实现Driver
522+
2、多核编程,这里的思路和之前多核编程提及的一样,即 数据分化,减少锁的使用,原子指令的支持
523+
3、内存方面,内存的预分配,专用分配,这一点slab已经实现,hugepage的使用)

0 commit comments

Comments
 (0)