能否在nanoFramework中为ESP32指定核心绑定任务?
关于nanoFramework在ESP32上绑定线程到特定核心的疑问
我之前查找到Arduino环境下可以通过xTaskCreatePinnedToCore(,,,0)或xTaskCreatePinnedToCore(,,,1)函数,将任务固定到ESP32的0号或1号核心。现在想了解在nanoFramework中有没有等效的实现方式,还是线程的核心分配由Thread类自动处理?
我看过一篇nanoFramework多线程相关的内容,里面只提到采用轮询(round-robin)调度方式,没有涉及核心切换的说明。我自己做了一个小型测试应用,运行情况尚可,但由于看起来并非真正的并发执行,所以想确认是否可以手动将进程分配到ESP32的0号或1号核心。
测试代码
public static void Main() { new Thread(() => { PrimCalcBadly badCalc = new PrimCalcBadly(); badCalc.DoCalc("first thread"); }).Start(); //new Thread(() => //{ // PrimCalcBadly badCalc = new PrimCalcBadly(); // badCalc.DoCalc("second thread"); //}).Start(); Thread.Sleep(Timeout.Infinite); } class PrimCalcBadly { public void DoCalc(string calName) { Debug.WriteLine($"start {calName}"); while (true) { var sDate = DateTime.UtcNow; for (int a = 2; a <= 1000; a++) { for (int b = 2; b <= 1000; b++) { if (a != b && a % b == 0) { break; } } } var eDate = DateTime.UtcNow; var ts = TimeSpan.FromTicks(eDate.Ticks - sDate.Ticks); Debug.WriteLine($"calculation for {calName} --> {ts.TotalSeconds}"); } } }
测试结果
仅运行1个计算实例
单次执行循环并重启约需2秒,调试窗口输出:
start first thread calculation for first thread --> 2.020124999 calculation for first thread --> 2.020197
运行2个计算实例
单次执行循环耗时约4秒,调试窗口输出:
start first thread start second thread calculation for first thread --> 4.74040799 calculation for second thread --> 4.04035 calculation for first thread --> 4.040268 calculation for second thread --> 4.040204999
运行3个计算实例
单次执行循环耗时约6秒,调试窗口输出:
start first thread start second thread start third thread calculation for first thread --> 7.26084799 calculation for second thread --> 6.66085599 calculation for third thread --> 6.020959999 calculation for first thread --> 6.06095 calculation for second thread --> 6.060862999 calculation for third thread --> 6.060842
内容的提问来源于stack exchange,提问作者CobyC
相关产品推荐
相关产品推荐

