में तुरंत एकाधिक धागे को फायर करें, मुझे यकीन नहीं है कि यह akka.net या TPL से अधिक संबंधित है, लेकिन मैं प्रश्न को स्पष्ट करने के लिए अपने उदाहरण के लिए अभिनेताओं का उपयोग करूंगा।akka.net
संक्षेप में प्रश्न: क्या वास्तव में CPU कोर के मुकाबले एक बार में अधिक धागे को आग लगाने के लिए akka.net को बताने का कोई तरीका है? यहां नमूना कोड और विवरण दिया गया है:
मैं वर्तमान में एक 8-कोर प्रोसेसर वाला लैपटॉप उपयोग कर रहा हूं।
for (int i = 0; i < 20; i++)
{
actorList.Add(system.ActorOf<ExampleActor>());
}
और फिर मैं उन सभी के लिए एक संदेश गुजर रही है::
actorList[0].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 1\t" + DateTime.Now.TimeOfDay);
actorList[1].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 2\t" + DateTime.Now.TimeOfDay);
...
actorList[19].Tell(new ExampleMessage());
Console.WriteLine("sent message to actor 20\t" + DateTime.Now.TimeOfDay);
सभी अभिनेता करता है, जबकि संदेश प्राप्त करने निम्नलिखित नकली है तो चलो कहते हैं कि मैं 20 अभिनेताओं बना रहा हूं जाने लंबी चलने वाली प्रक्रिया:
Console.WriteLine("Accessing slow service\t" + DateTime.Now.TimeOfDay
+ "\t" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(60000);
Console.WriteLine("Service call was successful\t" + DateTime.Now.TimeOfDay
+ "\t" + Thread.CurrentThread.ManagedThreadId);
ताकि मैं जानता हूँ कि जब अभिनेता बनाने से मैं भी अपने निर्माता में इस कोड है,:
public ExampleActor()
{
Console.WriteLine("Creating " + this.Self.Path + DateTime.Now.TimeOfDay);
....
}
तो अब जब मैं एप्लिकेशन चलाता हूं तो मुझे पहले सभी 20 कलाकारों के लिए "अभिनेता को भेजा गया संदेश" मिलता है - उसी मिलीसेकंड में। लेकिन बाद में, जब समय प्रारंभिकरण से आता है, तो क्या होता है कि पहले 8 अभिनेता पहले बनाए जाते हैं।
फिर, चूंकि अन्य कलाकारों ने नौकरी समाप्त नहीं की है, ठीक उसी समय 1 सेकंड बाद, दूसरा एक प्रारंभ किया गया है (9वीं)। एक और बाद में, हमारे 10 वें अभिनेता ने बनाया और थ्रेड शुरू किया। स्लीप ऑपरेशन।
अब सवाल यह है कि क्या akka.net (या इसके नीचे टीपीएल) को बताने का कोई तरीका है कि मुझे यकीन है कि धागे प्रत्येक सेवा कॉल के लिए ~ 60 सेकंड का इंतजार करेंगे? ताकि सभी 20 धागे एक बार में फेंक दिए जाएंगे, 8 बार एक बार शुरू होने की बजाय, और 12 सेकंड के बाद चलने वाले पूर्ण 20 धागे बीत चुके हैं?
धन्यवाद। दुर्भाग्यवश कुछ ग्राहक स्पष्ट थ्रेड गिनती सेटिंग्स चाहते हैं, लेकिन इसे पढ़ने वाले किसी भी व्यक्ति के लिए, जो आवश्यकताओं से बंधे नहीं हैं, मेरा सुझाव है कि आप एसिंक रूट का पालन करें। दोनों का परीक्षण किया गया, सब कुछ पूरी तरह से काम करता है। – nikovn