|
|
|
@ -990,6 +990,20 @@ public class Test {
|
|
|
|
|
2、http是超文本传输协议,信息是明文传输, https则是具有安全性的ssl加密传输协议
|
|
|
|
|
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
|
|
|
|
|
|
|
|
|
|
### SELECT和EPOLL区别
|
|
|
|
|
|
|
|
|
|
select的几大缺点:
|
|
|
|
|
|
|
|
|
|
(1)每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
|
|
|
|
|
|
|
|
|
|
(2)同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
|
|
|
|
|
|
|
|
|
|
(3)select支持的文件描述符数量太小了,默认是1024
|
|
|
|
|
对于第一个缺点,epoll的解决方案在epoll_ctl函数中。每次注册新的事件到epoll句柄中时(在epoll_ctl中指定EPOLL_CTL_ADD),会把所有的fd拷贝进内核,而不是在epoll_wait的时候重复拷贝。epoll保证了每个fd在整个过程中只会拷贝一次。
|
|
|
|
|
|
|
|
|
|
对于第二个缺点,epoll的解决方案不像select或poll一样每次都把current轮流加入fd对应的设备等待队列中,而只在epoll_ctl时把current挂一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表)。epoll_wait的工作实际上就是在这个就绪链表中查看有没有就绪的fd(利用schedule_timeout()实现睡一会,判断一会的效果,和select实现中的第7步是类似的)。
|
|
|
|
|
|
|
|
|
|
对于第三个缺点,epoll没有这个限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。
|
|
|
|
|
|
|
|
|
|
### 秒杀并发情况下库存为负数问题
|
|
|
|
|
|
|
|
|
|