c++ - 纤维用例

标签 c++ multithreading boost fiber

我读了很多关于纤维,或绿色线程,或者我们可以给用户态线程起的任何其他名称的文章。我开始阅读文档和教程(这些是 C++ 链接,但我不需要特定的语言):

但是,我似乎无法掌握纤维的要领。我知道纤程是一种协作多任务的方式,但据我发现,有关实际情况下线程和纤程之间相互作用的文档很少。

What are some practical use cases of fibers?

例如,每个文档实际上都使用异步 I/O 作为示例,但如果我没有 I/O 限制问题怎么办?例如,如果我的问题是计算一个大文件中的单词数怎么办?在这里,我只是在线程之间分割文件,纤维可以以某种方式提供帮助吗?我认为 CPU 密集型计算(例如数值问题(例如矩阵/vector 运算))不适合光纤,但同样,我可能完全错了。

最佳答案

what if my problem is counting words in a huge file? ..., can fibers help somehow?

没有。

every doc actually uses async I/O as an example

异步 ​​I/O 是线程最初要解决的问题,当时多 CPU 系统还没有走出实验室。线程是构建程序的另一种方式,该程序必须等待来自多个不同的非同步源的输入,并且必须及时响应这些输入。

根据它们的实现方式,当时的线程可能处于从“大部分相同”到“完全相同”的范围内,我们今天称之为“绿色线程”或“纤维”。

当多 CPU 系统进入市场时,线程被视为利用并行处理功能的一种自然而明显的方式。

关于c++ - 纤维用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096169/

相关文章:

c++ - 所以我给自己弄了一个线程池任务管理器系统。我应该从现在开始只使用它来创建所有线程吗?

multithreading - 并行执行计算量大的 map

c++ - makefile 有问题,没有引用资料

c++ - 使用链表的摘要报告代码中的错误

c# - 在 C# 中同步繁重任务和轻任务

c++ - 将 boost::posix_time::ptime 转换为 NTP 时间戳

c++ - 有没有办法检查堆栈协程是否在给定链的上下文中?

c++ - boost asio 读缓冲区

c++ - lambda 表达式的可变参数模板

c++ - 无法创建类模板对象