作者回复: 赞分享。
作者回复: 你这个理解倒是比较有趣,程序是伟大的。
作者回复: 👍
作者回复: 对应的文件描述字上有poll的动作,正在等待事件发生。
作者回复: 待我找黄姑娘来:)
作者回复: 进程阻塞其实就是把CPU时间调度给了其他的进程,因为得不到CPU时间,所以当前进程的代码没有办法再执行下去,表现的行为就是当前程序执行"休眠"在那里了。
这里的等待队列是LInux内核把等待调度的进行按照自己内部的数据结构,形成了一个队列。按照LInux内核任务调度算法进行调度,来唤醒对应的"休眠"进程。
作者回复: 看得好自信,汗,我试着回答哈:
1.根据套接字文件上的poll接口,套接字文件上记录了它有效的事件:
static inline unsigned int ep_item_poll(struct epitem *epi, poll_table *pt)
{
pt->_key = epi->event.events;
return epi->ffd.file->f_op->poll(epi->ffd.file, pt) & epi->event.events;
}
2.是的。
static int ep_scan_ready_list(struct eventpoll *ep,
int (*sproc)(struct eventpoll *,
struct list_head *, void *),
void *priv, int depth, bool ep_locked)
{
int error, pwake = 0;
unsigned long flags;
struct epitem *epi, *nepi;
LIST_HEAD(txlist);
/*
* We need to lock this because we could be hit by
* eventpoll_release_file() and epoll_ctl().
*/
if (!ep_locked)
mutex_lock_nested(&ep->mtx, depth);
...
}
作者回复: linux 4.14.4
作者回复: 不知道为什么会有这样的说法,我觉得这个说法不正确,epoll适合活跃连接很多的场景。
作者回复: 这就是social的力量 :)
作者回复: 主要是理解整体的概念和设计,细节不用理解太深。可以读理解几遍,肯定会有收获的。
作者回复: 你好像问过一次了吧,这个我认为不是内核报出来的,我建议你debug一下。