请问怎么才能写出最接近多进程的异步多线程?主要问题是错误处理,相互影响。
我还是rust新手,对线程的理解还是基于python。python就没有完美的解决多线程方案。协程跑不满CPU,多进程加载又太慢。还有就是用过另外一些脚本语言,也没有完美的多线程方案。
那么,rust在多线程方面,是有可能实现那种快速加载,又像多进程那样互不影响,能跑满CPU的完美多线程吗?
1
共 4 条评论, 1 页
请问怎么才能写出最接近多进程的异步多线程?主要问题是错误处理,相互影响。
我还是rust新手,对线程的理解还是基于python。python就没有完美的解决多线程方案。协程跑不满CPU,多进程加载又太慢。还有就是用过另外一些脚本语言,也没有完美的多线程方案。
那么,rust在多线程方面,是有可能实现那种快速加载,又像多进程那样互不影响,能跑满CPU的完美多线程吗?
评论区
写评论是的,rust能完美达到你的心愿。
python多进程是没办法。主流网络框架都是单进程多线程,nginx,netty,go。。。
异步的目的是提高线程本身的资源利用率(使得线程blocking的场景变少) 针对的是IO密集的任务 每个await相当于是一个必须的等待(只不过原来阻塞线程 现在交给了eventloop) 如果是计算密集的 直接用thread就好了
现在异步网络编程就用async await,多线程可以由异步运行时提供。目前rust的tokio异步运行时使用任务队列+任务窃取,能很好的利用多核,速度也很快,可以去试试,你都不需要去手动调度线程,直接投递任务就行,调度器会自动分配任务至各个线程,而且会平均各个线程的负载。而且async await语法本质是一种无栈协程,开销非常低。