我刚开始查看go和go的一致性是如何工作的。我只是在想,您是否可以在C++中实现一些类似的东西,并找到boost.fiber。大猩猩和促进纤维有什么区别?你能用C++中的纤维来实现戈鲁丁吗?
发布于 2016-03-14 19:32:12
因此,根据我从boost.fiber库的源代码中可以收集到的信息,它看起来确实比goroutines更通用、更强大。goroutines的口号是不要在协同器之间共享数据,而是在必要时将数据传递给它们。这显然是可能的光纤以及通道(boost::fibers::unbounded_channel<T>和boost::fibers::bounded_channel<T>),但我要记住的是,数据是安全地共享在一个线程中的所有光纤。这是管理(通过使用互斥,我猜),以确保一次只运行一个光纤,所以您可能不需要通道为一个特定的用例。
光纤似乎也能让你控制线程内部纤维的同步。显然,阻塞的I/O会阻塞运行操作的整个线程,这是有意义的。更酷的是,如果需要的话,您可以使用光纤来模拟阻塞(例如,严格的例程调度顺序)。这里有一个非常好的例子,用于基于优先级队列的光纤自定义调度,https://github.com/olk/boost-fiber/blob/master/examples/priority.cpp也是如此。然而,我愿意打赌,调度默认是交错的。
因此,简单地说,似乎主要的观点是,是的,纤维已经实现了类似大猩猩的东西。您有通道,可以是多线程(我确信这也可以扩展到多核乐趣),您也可以在同一个线程中运行异步操作(同样,我假设它们默认为在同一个线程中交叉调度)。光纤似乎有更多的,上下文切换,光纤安全共享内存,而go倾向于把事情限制在使用通道的数据传输上。
老实说,你得像我一样浏览代码库,看看还有什么纤维,但是是的,我会说这是一些主要的区别。
https://stackoverflow.com/questions/35992854
复制相似问题