
关注
回答优化:
6、封装c++20协程,直接使用会很繁琐,封装成异步任务,开发者只需按照模板即可编写协程代码或者异步代码。当协程需要等待异步结果时,可以co_await等待。事件发生时,会唤醒当前协程继续执行。也提供了一些语法糖支持,wait_for,gather等。提供事件循环支持协程调度。事件循环:获取epoll_wait返回已就绪事件,定时器超时事件,将所有已就绪协程逐一调度执行。
8、协程相对于线程,更加轻量级。切换时不需要进入内核态,在用户态完成,切换时只需将协程状态(寄存器、变量、调用栈)保存到协程状态对象即可,其栈也比线程小。利用协程编写异步io代码更加方便,因为有co_await\co_yield\co_return这几个语法糖。线程编写则很割裂。
10、常见的池有:线程池、内存池、连接池(http\数据库)。共同的特点就是这些资源创建都需要一定的开销,如果每次使用都需要临时申请,cpu时间有相当部分用于创建这些资源。池就可以充分复用资源,降低资源创建开销。
线程池:系统启动时先创建若干线程,每个线程处于睡眠状态,当有任务时,唤醒其中一个线程来消化任务,任务完成,继续睡眠。充分复用线程,避免线程创建和销毁开销过大。(经典场景:一个连接一个线程,不可取,创建慢,连接数有上限)
内存池;预先申请一块较大的空间,后面需要申请内存,直接从这块内存划分,而不是通过系统调用重新申请。当用完释放内存时,将内存放回到池中,而不是直接释放。内存池的优点:有效降低内地申请和释放的开销。主要是减少系统调用的次数。以及能减少内存碎片。
连接池;同样是先创建,后面需要发送信息时直接复用池中连接。提高连接利用率。因为连接创建的开销还是比较大的。如果每次需要时才创建连接,用完就释放连接,这样用于真正数据的收发占比会比较低,因为连接创建需要握手,认证等等步骤。复用连接就能提高数据带宽的占比。例如:创建连接需要3ms,每次发数据固定1ms,池化与非池化对比明显。
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你觉得现在还能进互联网吗? #
2044次浏览 66人参与
# 如何准备秋招 #
4899次浏览 76人参与
# 现代汽车前瞻技术研发急速编程挑战赛 #
18807次浏览 167人参与
# 实习,不懂就问 #
15993次浏览 225人参与
# 如果中了500万,你会离职吗? #
86394次浏览 676人参与
# 你觉得实习能学到东西吗 #
7285次浏览 163人参与
# 哪个瞬间让你对大厂祛魅了? #
379525次浏览 2777人参与
# 面试时被问的最奇葩的问题 #
21543次浏览 124人参与
# 秋招什么时候开投比较合适? #
3065次浏览 59人参与
# 软开人,秋招你打算投哪些公司呢 #
99518次浏览 934人参与
# 来聊聊你认为的薪资天花板是哪家? #
30337次浏览 174人参与
# 每个月的工资都是怎么分配的? #
7111次浏览 134人参与
# 预测一下26届秋招形势 #
11624次浏览 124人参与
# 腾讯工作体验 #
473638次浏览 3489人参与
# 打工人的精神状态 #
51797次浏览 939人参与
# 职场情商大赛 #
131201次浏览 655人参与
# 高考出分的那一天,我__ #
9816次浏览 142人参与
# 非技术2024笔面经 #
384599次浏览 4732人参与
# 一觉醒来,秋招难度下降一万倍…… #
83532次浏览 642人参与
# 京东美团大战,你怎么看? #
92516次浏览 569人参与
# 安利/避雷我的专业 #
75436次浏览 522人参与