线和光纤有什么区别?我听说过来自红宝石的纤维,我读过听过它们有其他语言版本,有人可以用简单的语言向我解释一下螺纹和纤维之间有什么区别.
我正在阅读并发性.对于那些含有令人困惑的类似定义的术语,我有点过头了.即:
我的印象是,区别在于(1)是真正的并行还是多路复用; (2)是在CPU,OS还是在程序中管理; 和(3..5)我无法辨认的其他一些事情.
这些并行方法之间的差异是否有简明扼要的指导?
parallel-processing concurrency multithreading process fiber
我正在寻找在c#中实现协同例程(用户调度线程)的方法.使用c ++时我使用的是光纤.我在互联网上看到C#中不存在光纤.我想获得类似的功能.
有没有"正确"的方法在c#中实现协同程序?
我曾想过使用在调度程序线程上获取单个执行互斥锁+ 1的线程来实现它,该线程为每个协同程序释放这个互斥锁.但这似乎非常昂贵(它强制每个协程之间的上下文切换)
我也看过了yield迭代器的功能,但据我所知,你不能在内部函数中产生(仅在原始的ienumerator函数中).所以这对我有点好处.
出于好奇心,我一直在寻找一套C#/ .net类来支持光纤/协同程序(win32版本)并且没有任何运气.
有人知道这样的野兽吗?
我正在阅读http://olk.github.io/libs/fiber/doc/html/在我看来,使用Boost.Fiber C++正在接近Erlang拥有数千个"进程"的能力,也被称为"绿色"进程[threads]" http://en.wikipedia.org/wiki/Green_threads.
我的问题是,是Boost.Fiber为生产做好准备,还有现在 ç有更好的文档和示例++的替代品?有人提到轻量级线程,但我似乎无法找到它的引用.最后一个问题是,为什么C++标准不包括Fibers?
我对此感兴趣的原因是因为我有实时更新,其中值更改可能会影响(产生)数百个/小型的小型但令人尴尬的并行计算.imo,C++线程模型不能很好地工作.请不要使用GPU,因为它目前需要很长时间才能将信息传输到GPU或从GPU传输信息.
我意识到Erlang远不止这个,所以请不要在一般情况下教我Erlang vs C++.
在书中Linux System Programming, 2nd Edition,协同程序和光纤之间的区别解释如下:
协程和光纤提供的执行单元甚至比线程更轻(前者在它们是编程语言构造时是它们的名称,后者在它们是系统构造时).
我有一些Coroutines(语言结构)的例子,但无法找到Fibers的例子.
任何人都可以提供一些光纤(系统构造)的例子吗?
我想获得一个轻便的便携式光纤库,它具有MIT许可证(或更宽松).Boost.Coroutine不符合(不轻量级),也没有Portable Coroutine Library和Kent C++ CSP(都是GPL).
编辑:你能帮我找一个吗?:)
require 'net/http'
urls = [
{'link' => 'http://www.google.com/'},
{'link' => 'http://www.yandex.ru/'},
{'link' => 'http://www.baidu.com/'}
]
urls.each do |u|
u['content'] = Net::HTTP.get( URI.parse(u['link']) )
end
print urlsRun Code Online (Sandbox Code Playgroud)
此代码以同步方式工作.第一个请求,第二个,第三个.我想异步发送所有请求并urls在完成所有请求后打印.
最好的办法是什么?纤维是否适合这种情况?
我对Erlang的了解非常有限,但据我所知,它可以以非常低的成本产生"过程".
所以我想知道,幕后的那些"过程"是什么?
它们是纤维吗?主题?延续?
我读了很多关于Fibers或green threads或我们可以给用户态线程的任何其他名称。我开始阅读文档和教程(这些是 C++ 链接,但我不需要特定语言):
但是,我似乎无法掌握有关纤维的要领。我知道纤程是协作多任务的一种方式,但据我所知,有关实际情况下线程和纤程之间相互作用的文档很少。
纤维有哪些实际用例?
例如,每个文档实际上都以异步 I/O 为例,但如果我没有 I/O 绑定问题怎么办?例如,如果我的问题是计算大文件中的单词怎么办?在这里,我只是在线程之间拆分文件,纤维可以以某种方式提供帮助吗?我想像数值问题(例如,矩阵/向量运算)这样的 CPU 密集型计算不适合纤维,但同样,我可能完全错了。
fiber ×10
concurrency ×3
coroutine ×3
boost ×2
c# ×2
c++ ×2
erlang ×2
.net ×1
asynchronous ×1
c++11 ×1
licensing ×1
portability ×1
process ×1
real-time ×1
ruby ×1