[BETA] Coroutine for CovScript

这周终于搞明白了ucontext和windows fiber相关的API,给CovScript加上了fiber支持
虽然还是不好搞多线程,但至少有Coroutine后,可以在单线程上方便的处理并发任务了


在Windows上的运行结果:
6VNBYRC4NZ$LW3R~ZVPX
在Linux上的运行结果:

具体详见: covscript/covscript at fiber (github.com)

3 个赞

目前测试的结果是因为加入了Swap Context相关的功能,执行性能略有下降(约%1),准备在后期版本中尝试缓解。不过个人认为还是利远大于弊

1 个赞


目前支持 Coroutine 的 CovScript 3.4.2 已经在官网上更新了(开发版)
我分别在 E5-2698 v3 (Ubuntu 22.04) 和 R7-5800X (Windows 11) 上进行了测试,分别能达到约 2.5 万次每秒 (100x Worker) 和 8.6 万次每秒 (20x Worker) 的异步 TCP 传输
服务端都是单线程

1 个赞

目前 3.4.2 Build 10 在 Ubuntu 22.04 上的测试结果:
纯协程上下文切换,共十个 Worker:每秒 30 亿
TCP 并发,共二十个 Worker:每秒 6.3 万
很有趣的测试结果,同样版本在 Windows 11 上的测试结果:
纯协程上下文切换,共十个 Worker:每秒 20 亿
TCP 并发,共二十个 Worker:每秒 7.5 万
可以看出,Linux 上线程切换开销更低,Windows 上 TCP 连接开销更低,似乎有点不符合认知,感觉是 ASIO 底层实现的差异问题
共同点是都很高,单线程这么高的并发量,真的很超出预期

作为对比,CovScript 的顺序执行性能分别是:
Windows 11:630 万次
Ubuntu 22.04:680 万次
需要注意的是 Ubuntu 22.04 运行在虚拟机中


这是测试的 TCP Server 源码
https://github.com/covscript/covscript/blob/master/tests/test_tcp_server.csc

1 个赞