今天和大家说说C++多线程中的原子操作。首先为什么会有原子操作呢?这纯粹就是C++这门语言的特性所决定的,C++这门语言是为性能而生的,它对性能的追求是没有极限的,它总是想尽一切办法提高性能。互斥锁是可以实现数据的同步,但同时是以牺牲性能为代价的。口说无凭,我们做个实验就知道了。
视频解析:linux系统下协程的实现与原理剖析训练营(上)linux系统下协程的实现与原理剖析训练营(下)1 导论使用 C++ 来编写高性能的网络服务器程序,从来都不是件很容易的事情。在没有应用任何网络框架,从 epoll/kqueue 直接码起的时候尤其如此。
事情到这个点就有点尴尬了, 原有的asio, 架构层面来说, 跟新的execution是存在落差的. 而项目实践上来说, asio相当稳扎稳打, 而以libunifex当前的状态来说, 离工业化使用其实是有一定距离的. 但asio作者在21年时候的两篇演讲:Talking Async Ep1: Why C++20 is the Awesomest Language for Network Programming。
C++20 带着 Coroutines 来了!花了一两周的时间后,我想写写 C++20 协程的基本用法,因为 C++ 的协程让我感到很奇怪,写一个协程程序十分费劲。让我们抛去复杂的东西,来看看写一个 C++ 协程需要哪些东西。
我fork过来的修改版在这里,代码改得比较多,这份实现逻辑上更加接近于lua的协程库:首先是支持协程里启动协程,比如A resume B => B resume C => C yield 返回 B => B yeild 返回 A。
对于IO 同步操作来说,handle 函数内部实现如下,我们发现IO操作与 epoll_wait 是在同一个处理流程里面的。1 台服务器 14G 内存,1 核 CPU 3 台客户端 4G 内存,1 核 CPU。