简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
解决方案 »
- 这种是什么编码:百万电子琴
- C#索引器问题
- vs 工具箱的问题
- 如何性能优化C#??
- 摄像头捕获的视频数据用什么编码解码器对数据进行压缩和解压缩以便网络传输啊?
- 函式 'Instance' 並未傳回有關所有程式碼路徑的值。使用該結果時,可能會在執行階段發生 null 參考例外狀況。
- 關於數組引用的小問題
- C# 菜鸟问题。。。高分。。。
- 关于Socket传送数据的问题
- 鼠标在ComboBox的下拉框里移动,MouseMove不响应,请教办法
- webbrower中用GetAttribute() 方法取links集合的href值?
- c#如何写服务?
于是右手要拿筷子,还要拿碗,不停地折腾,吃饭没有效率了
你的页面在执行过程中,中间有一段代码需要去生成静态页面了,而且还非常耗时,如果你等他完成后再继续执行页面,客户可能就等不及了,这时候怎么办,就需要再开辟一个线程,去做生成静态页面的事,让目前这个线程继续执行,这样客户就不会等待了
是为了增加CPU的利用率,避免等待慢速操作造成的CPU闲置
为了方便控制
直接创建Thread对象,并且调用它的Start方法
使用ThreadPool.QueueUserWorkItem方法
使用BackgroundWorker static void Main(string[] args)
{
Thread thread = new Thread(new ParameterizedThreadStart(SomeMethod));
thread.Start(100);
ThreadPool.QueueUserWorkItem(new WaitCallback(SomeMethod), 100);
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
Console.Read();
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
SomeMethod(100);
}
static void SomeMethod(object max)
{
int length = (int)max;
for (int i = 0; i < length; i++)
{
Console.WriteLine(i.ToString());
}
}