典型的应用程序都是由两种基本的操作组成的:CPU-bound和I/O-bound;
常用的I/O-bound的操作有:
I/O 设备 : 键盘,显示器,鼠标和打印机等.
硬件驱动:
网络或通讯端口;
其它硬件设备
区分不同的操作类型有助于分配不同的任务到不同的线程,这样可以提高程序的性能、增加硬件的吞吐量。不过切记不要为了多线程而多线程,否则就像打开了潘多拉的盒子,有无数麻烦的事情等着你,例如:线程同步、组件并发性等问题。
Threads
在.NET中,线程是最基本的执行单元。在Windows操作系统下,每个.NET线程都可以一一映射到Win32线程。
public sealed class Thread
{
public static Thread CurrentThread {get;}
}
访问threadId的方法:
using System.Threading;
Thread currentThread = Thread.CurrentThread;//获得Thread的实例
int threadId = currentThread.ManagedThreadId;//可以保证在这个进程中是唯一的
给线程命名:
using System.Threading;
Thread currentThread = Thread.CurrentThread;//获得Thread的实例
currentThread.Name = "Main UI Thread";
创建线程
a. 创建Thread对象;
b. 把Thread对象和一个thread处理函数关联
线程处理函数可以是有形参和无形参的,例如:
void <MethodName>();
void <MethodName>(object argument);
无形参的必须把函数名称赋给一个专门的deligate: ThreadStart
public delegate void ThreadStart();
public class MyClass
{
public void ShowMessage()
{
Thread currentThread = Thread.CurrentThread;
string caption = "Thread ID = " + currentThread.ManagedThreadId;
MessageBox.Show("ShowMessage runs on a new thread", caption);
}
}
MyClass obj = new MyClass();
ThreadStart threadStart = obj.ShowMessage;
Thread workerThread = new Thread(threadStart);
workerThread.Start();//Start执行完毕,马上就把控制权交给当前线程,而不是新创建的线程
设计线程处理函数
线程处理函数通常都包括一个循环,如下所示:
public void MyThreadMethod()
{
while (<some condition>)
{
<Do some work>
}
}
(To be Continued)
转载于:https://www.cnblogs.com/cphobby/archive/2007/10/03/912483.html