goroutines 和 boost.fiber 之间的区别
Difference between goroutines and boost.fiber
我刚刚开始了解 go 以及 go 中的并发性是如何工作的。
我只是想知道您是否可以在 C++ 中实现相同的东西并找到 boost.fiber。
goroutines 和 boost fibers 有什么区别?
你能用 C++ 中的那些纤程实现类似 goroutine 的东西吗?
因此,从我从 boost.fiber 库的源代码中收集到的信息来看,它似乎确实比 goroutine 更通用、更强大。 goroutines 的口头禅是不在协程之间共享数据,而是在必要时将数据传递给它们。这显然在纤程中以及通道(boost::fibers::unbounded_channel<T>
和 boost::fibers::bounded_channel<T>
)中是可能的,尽管我要记住的一件事是数据在单个线程中的所有纤程之间安全共享。这是管理(通过使用互斥锁,我猜)以确保一次只有一个光纤 运行s,因此您可能不需要特定用例的通道。
Fiber 似乎还可以让您控制线程内纤程的同步。显然 I/O 块将阻塞光纤 运行ning 操作所在的整个线程,这是有道理的。更酷的是,如果需要,您可以使用 Fiber 来模拟阻塞(例如,对于例行调度的严格顺序)。这里也有一个很好的基于优先级队列的纤程自定义调度示例 https://github.com/olk/boost-fiber/blob/master/examples/priority.cpp。但是,我愿意打赌调度默认为交织它们
所以只是总结一下,似乎要带走的要点是,是的,Fibers 已经实现了类似 goroutine 的东西。你有通道,你可以多线程(我相信这也可以扩展到多核乐趣),你可以 运行 在同一个线程中进行异步操作(同样,我假设它们默认为交错调度在同一个线程中)。纤程似乎有更多、上下文切换、纤程安全的共享内存,而 go 倾向于将事情限制在使用通道传递数据。
老实说,您必须像我一样浏览代码库才能看到 Fibers 还有什么,但是是的,我会说这些是一些主要差异。
我刚刚开始了解 go 以及 go 中的并发性是如何工作的。 我只是想知道您是否可以在 C++ 中实现相同的东西并找到 boost.fiber。 goroutines 和 boost fibers 有什么区别? 你能用 C++ 中的那些纤程实现类似 goroutine 的东西吗?
因此,从我从 boost.fiber 库的源代码中收集到的信息来看,它似乎确实比 goroutine 更通用、更强大。 goroutines 的口头禅是不在协程之间共享数据,而是在必要时将数据传递给它们。这显然在纤程中以及通道(boost::fibers::unbounded_channel<T>
和 boost::fibers::bounded_channel<T>
)中是可能的,尽管我要记住的一件事是数据在单个线程中的所有纤程之间安全共享。这是管理(通过使用互斥锁,我猜)以确保一次只有一个光纤 运行s,因此您可能不需要特定用例的通道。
Fiber 似乎还可以让您控制线程内纤程的同步。显然 I/O 块将阻塞光纤 运行ning 操作所在的整个线程,这是有道理的。更酷的是,如果需要,您可以使用 Fiber 来模拟阻塞(例如,对于例行调度的严格顺序)。这里也有一个很好的基于优先级队列的纤程自定义调度示例 https://github.com/olk/boost-fiber/blob/master/examples/priority.cpp。但是,我愿意打赌调度默认为交织它们
所以只是总结一下,似乎要带走的要点是,是的,Fibers 已经实现了类似 goroutine 的东西。你有通道,你可以多线程(我相信这也可以扩展到多核乐趣),你可以 运行 在同一个线程中进行异步操作(同样,我假设它们默认为交错调度在同一个线程中)。纤程似乎有更多、上下文切换、纤程安全的共享内存,而 go 倾向于将事情限制在使用通道传递数据。
老实说,您必须像我一样浏览代码库才能看到 Fibers 还有什么,但是是的,我会说这些是一些主要差异。