2016-04-15 10 views
1

Naughy Dogs fiber based task systemに基づいて独自のタスクシステムを実装したいと考えています。私は大体このDには未来/約束がありますか?

auto fiber = new Fiber((){ 
    someFunction(); 
}); 

ようにそれをやりたい

は、それから私は、私が作成したスレッドにその繊維を与えたいです。それは問題ではありません。

時々私は結果を戻したいと思うことがあります。おそらくsomeFunctionint function()です。

auto t = task!someFunction(); 
auto fiber = new Fiber((){ 
    task.yieldForce; 
}); 
submitFiberToSomeThreadPool(fiber); 

しかし、私はTaskのように使用することはできないようです。私はTaskpoolにそれを提出しなければならないか、私は嫌いであるexecuteInNewThreadに電話しなければならないようです。

これは自分の将来の約束システムを実装する必要があることを意味しますか?

+0

ので、あなたは、繊維と、発信者の間の周りに値を渡すために合うように思われる質問/降伏関数の引数として渡しますか? – WebFreak001

+0

私はプレゼンテーションをチェックし、「繊維を使っていたずらな犬のエンジンを並列化する」というタイトルが私の目を引く。 - どのように用語 "平行"と "繊維"を一緒に置くことができますか? – DejanLekic

+0

繊維と平行度の間に本質的に矛盾するものはありません。 N本の糸+ M糸を使用することは、N糸を使用するよりも並列処理に適しています。これは、プレゼンテーションを読まずに期待していたものです。 –

答えて

2

Fiberは非常に基本的な原始的です。 vibe.dに実装され、より高いレベルのタスクシステムがあります - 具体的には、あなたはhttp://vibed.org/api/vibe.core.concurrency/async

import vibe.core.core; 
import vibe.core.concurrency; 

void main () 
{ 
    // "root" task, necessary as one can't suspend main 
    // thread as it isn't wrapped by fiber 
    runTask({ 
     auto future = async({ 
      sleep(500.msecs); 
      return 42; 
     }); 

     sleep(250.msecs); 
     int value = future.getResult(); 

     exitEventLoop(); 
    }); 

    runEventLoop(); 
} 
関連する問題