实例:一个服务器程序的架构介绍
由于每个事变线程都存在一个 m_functors,此刻题目来了,怎样将发生的使命平衡地分派给每个事变线程。这个做法相同上文中怎样将新毗连的 socket 句柄挂载到事变线程的 epollfd 上,也是 round-robin 算法。上文已经描写,此处不再赘述。 尚有种环境,就是但愿使命发生时,事变线程可以或许立马执行这些使命,而不是等 epoll_wait 超时返回之后。这个时辰的做法,就是行使一些能力叫醒epoll_wait,Linux 体系可以行使socketpair 或 timerevent、eventfd 等能力。 题目 1 的谜底是:营业层发生使命也许会交给数据库使命行列A,这里的营业层代码也许就是事变线程中 do_other_things() 函数执行体中的挪用。至于交给这个 9 个数据库线程的哪一个的使命行列,同样回收了 round-robin 算法。以是就存在一个工具 CDbThreadManager来打点这九个数据库线程。下面的伪码是向数据库事变线程中插手使命:
同理题目 2 中的斲丧者也也许就是 do_other_things() 函数执行体中的挪用。 此刻来说题目 3,营业层的数据发生后,颠末 TcpSession 装包后,必要发送的话,发生使命丢给事变线程的 do_other_things(),然后在相干的 Channel 内里发送,由于没有监测该 socket 上的可写变乱,以是该数据也许挪用 send() 可能 write() 时会阻塞,不要紧,sleep() 一会儿,继承发送,一向实行,到数据发出去。伪码如下:
最后,尚有一个模块日记线程没有先容,高机能的日记实现方案今朝并不常见。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |