模拟面试
为了帮实验者更好的使用tinyCoroLab准备实习和秋招,我增加了模拟面试环节,即根据我几十场大厂面试的经验来模拟应聘者向面试官介绍tinyCoroLab的场景,并且应聘者为作者本人,同时也可以帮助大家更深入的了解tinyCoroLab。
问题一:你为何要做这个项目
🧑💼面试官:你先介绍一下你的tinyCoro项目吧
tinyCoro是一个linux系统环境下的以C++20协程技术和linux io_uring技术相结合的高性能异步协程库。高效且全能的io_uring和C++20无栈协程的轻量级切换相组合使得tinyCoro可以轻松应对I/O密集型负载,而C++20协程的特性使得用户可以以同步的方式编写异步执行的代码,大大降低了后期维护的工作量,且代码逻辑非常简单且清晰,除此外tinyCoro还提供了协程安全组件,以协程suspend代替线程阻塞便于用户构建协程安全且高效的代码。
🧑💼面试官:所以是异步编程库对吗?现有的异步库不是很多吗?
现有的异步库存在诸多问题,比如这些库底层使用的IO模型例如多路复用IO epoll只支持网络IO,aio使用受限大,且容易出现伪异步的情况,而且大多数异步库使用回调的写法,这会使逻辑支离破碎,加大项目维护难度。
而tinyCoro就是为了解决这些问题而生,其核心使用了强大的异步IO技术liburing和C++20协程,得益于liburing,tinyCoro可以支持linux上绝大多数的IO并且可以高效完成IO事件,再搭配上C++20协程,用户可以使用tinyCoro以同步的方式编写异步代码,所有的异步操作都是由库底层支持的,拒绝丑陋的回调函数写法。
综上,tinyCoro更像是一个六边形战士,简洁优雅且高效。
🧑💼面试官:既然你把liburing和C++20协程描述的这么厉害,那为何工业界没广泛应用呢?
主要原因有两个:
liburing从2018年由linux官方人员发起,但直到近几年才达到一个稳定可用的程度,因此受众有限。
C++20协程存在很多争议,即是否能提高程序性能,协程单独使用是没有什么用的(请实验者想想为什么),甚至会因为创建协程资源对项目引入额外的运行开销,因此必须找到另外一门技术,让协程真正发挥作用。
针对第二个原因,我想我为C++20协程技术找到了搭档,在经过调研发现liburing简直为协程量身打造,而在开发完tinyCoro后对其进行压测其结果确实达到了我的预期。
另外该技术没在工业界广泛应用的一个重要原因便是其并不能带来巨大的性能提升,可能只有百分点级别,这并不值得为已有项目更换底层技术,但是我还是看好C++协程技术和liburing未来的发展。
下面就开始正式介绍tinyCoro怎么实现了
问题二
后续更新中。。。
Last updated