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()的线程呢?