C# 这个多线程程序能在单核处理器上正常工作吗?
这个程序解析文本文件。它有两条线。其中一个读取文件,另一个解析文件。这个多线程程序能在单核处理器上正常工作吗?为了在单核处理器上获得正确的工作,我添加了在创建另一个线程之前等待线程结束的功能C# 这个多线程程序能在单核处理器上正常工作吗?,c#,multithreading,C#,Multithreading,这个程序解析文本文件。它有两条线。其中一个读取文件,另一个解析文件。这个多线程程序能在单核处理器上正常工作吗?为了在单核处理器上获得正确的工作,我添加了在创建另一个线程之前等待线程结束的功能 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Windows.Forms;
namespace lab2Form
{
public partial class Form1 : Form
{
private CLogParser m_parser;
private Thread m_parserThread, m_fileReaderThread;
public Form1(string logName)
{
InitializeComponent();
m_parser = new CLogParser();
timer1.Interval = 50;
m_fileReaderThread = new Thread(m_parser.ThreadReadList);
m_fileReaderThread.Start(logName);
m_fileReaderThread.Join(); THE ADDED STRING
m_parserThread = new Thread(m_parser.ThreadProc);
m_parserThread.Start();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (m_parserThread.ThreadState != ThreadState.Stopped)
{
m_parser.ShowData(ref dmRequestsGridView, ref URLGridView, ref dmDataGridView, ref errorCodesGridView);
}
else
{
timer1.Stop();
MessageBox.Show("Parsing Complete!");
}
}
}
}
对。一般来说,您可以愉快地使用比物理处理器更多的线程运行一个进程——如果有什么区别的话,那么如果您有多个物理处理器内核,您会遇到更多的线程问题(突然之间可能会遇到两个(或更多)物理处理器内核)在同一个时钟周期内发生的事情。多任务操作系统比多核体系结构存在的时间更长。操作系统只是在线程之间执行上下文切换。单个线程不会被饿死(如果你做错了什么,它们可能会饿死,但在简单的情况下,它们都会得到一个时间片)
您不需要调用
fileReaderThread.Join()
happy?。上下文切换的数量越大,我就越难过,越不高兴:(高兴与不高兴取决于线程在做什么。您可能不希望CPU绑定的线程多于内核,但计算并不是生成线程的唯一原因。创建线程的另一个原因是等待并处理某个异步事件。您可能有几十个这样的线程,静静地等待它他们是否在等待您的计算线程仔细考虑这个问题。我只有一个任务来获取程序,它将在单核处理器上正确工作。那么连接到一个核的线程呢?你没有测试过吗?结果如何?多变量和非多变量在相同的时间内正确工作。我没有在单核架构上测试程序,也没有连接到一个内核e、 启动一个线程执行a(),连接它,然后启动一个线程执行B(),这有什么意义?为什么不只启动一个执行a()然后执行B()的线程呢?