进程是对一段静态指令序列(程序)的动态执行过程,是系统进行资源分配和调度的一个基本单位。同一个进程是可以划分为若干个独立的执行流,也称之为线程。
线程是CPU调度和分配的基本单位。在Windows环境下,用户可以同时运行多个应用程序,执行的应用程序就是一个进程。例如一台电脑上同时打开两个QQ时,每个运行的QQ就是一个进程;而用一个QQ和多个人聊天时,每个聊天窗口就是一个线程。
在C/S模式下,服务器需要不断监听来自各个客户端的请求,这时,如果采用单线程机制的话,服务器将无法处理其他事情,因为这个线程要不断的循环监听请求而无法对其他请求做出响应。实际上,当要花费大量时间进行连续的操作时,或者等待网络或其他I/O设备响应时,都可以使用多线程技术。
在C#中,用于处理进程和线程的类是:Process类和Thread类。
1.Process类
Process类位于System.Diagnostics命名空间下,用于完成进程的相关处理任务,以及对进程进行管理、我们在在本地机器上可对线程进行启动、停止、查询操作:
启动进程:
Process.Start("notepad.exe");
Process.Start()重载方法如下:
1.Start(ProcessStartInfo) 启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 Process 组件关联。
2.Start(String, String) 通过指定应用程序的名称和一组命令行参数来启动一个进程资源,并将该资源与新的 Process 组件相关联。
3.Start(String, String, SecureString, String) 通过指定应用程序的名称用户名密码和域来启动一个进程资源,并将该资源与新的 Process 组件关联起来。
4.Start(String, String, String, SecureString, String) 通过指定应用程序的名称、一组命令行参数、用户名、密码和域来启动一个进程资源,并将该资源与新的 Process 组件关联起来。
获取进程:
//获取本地所有进程并输出
Process[] process;
process = Process.GetProcesses();
foreach (var item in process)
{
Console.WriteLine(item.ProcessName);
}
停止进程:
//停止线程
Process[] process;
process = Process.GetProcessesByNam("ProcessesName");
foreach (var item in process)
{
item.WaitForExit(1000); //终止线程前等待的毫秒数
item.Close();//释放与此组建关联的所有资源
item.CloseMainWindow();//关闭拥有用户界面的进程
}
2.Thread类
位于System.Threading命名空间下,Thread是用于创建和控制线程的一个类。对线程的常用操作有:启动线程、终止线程、合并线程和让线程休眠等。