进程/线程/多线程
- 进程:计算机概念,虚拟的记录,描述一个应用程序在计算机上运行时,所消耗的各种机资源集合—Cpu+内容+磁盘IO+网络资源。
- 线程:一个程序的进程中,所执行的具体的某一个动作的最小执行流。
- 句柄:是一个long类型的数字,对应着计算机程序中的某一个小部件。
- 进程中包括多个线程;线程依附于进程存在。
- 线程:—同步异步
- CPU是分片执行:比如把每一个核每一秒钟可以执行的动作切分成10000份,操作系统执行多个动作时,开始动作A,使用了分片后的某一份,结束的时候可能是另外的谋一份
C#中的多线程:Thread/ThreadPool/Task
Thread.Sleep和Task.Delay区别
{
Stopwatch stopwatch = Stopwatch.StartNew();
stopwatch.Start();
Thread.Sleep(3000);//主线程延迟3000毫秒,会卡界面
stopwatch.Stop();
Debug.WriteLine($"Sleep:3000:{stopwatch.ElapsedMilliseconds}");
}
{
//Task.Delay一般和ContinueWith搭配,意指延迟一段时间(例3000毫秒)后去做一些事
Stopwatch stopwatch = Stopwatch.StartNew();
stopwatch.Start();
Task.Delay(3000).ContinueWith<int>(t =>
{
stopwatch.Stop();
Debug.WriteLine($"Dely:3000:{stopwatch.ElapsedMilliseconds}");
var a= DoSomethingInt();
return a;
});//延迟3000毫秒执行
}
/*ContinueWith有可能会使用主线程其中会*/
等待线程结束(taskFactory.ContinueWhenAny和WaitAny)
List<Task> tasks = new List<Task>();
TaskFactory taskFactory = new TaskFactory();
//不带参数
tasks.Add(taskFactory.StartNew(() => { DoSomethingInt("1"); }));
tasks.Add(taskFactory.StartNew(() => { DoSomethingInt("2"); }));
tasks.Add(taskFactory.StartNew(() => { DoSomethingInt("3"); }));
tasks.Add(taskFactory.StartNew(() => { DoSomethingInt("4"); }));
tasks.Add(taskFactory.StartNew(() => { DoSomethingInt("5"); }));
//Task.WaitAny会卡顿界面
//Task.WaitAny(tasks.ToArray());
//taskFactory.ContinueWhenAny不会卡顿界面
taskFactory.ContinueWhenAny(tasks.ToArray(), t => { Debug.WriteLine("Any Task is Completed"); });
//带参数的情况
tasks.Add(taskFactory.StartNew(t => { DoSomethingInt(Convert.ToString(t)); }, "1"));
tasks.Add(taskFactory.StartNew(t => { DoSomethingInt(Convert.ToString(t)); }, "2"));
tasks.Add(taskFactory.StartNew(t => { DoSomethingInt(Convert.ToString(t)); }, "3"));
tasks.Add(taskFactory.StartNew(t => { DoSomethingInt(Convert.ToString(t)); }, "4"));
tasks.Add(taskFactory.StartNew(t => { DoSomethingInt(Convert.ToString(t)); }, "5"));
//Task.WaitAny(tasks.ToArray());
taskFactory.ContinueWhenAny(tasks.ToArray(), t => { Debug.WriteLine($"Task [{t.AsyncState}] is Completed"); });
WaitAll和TaskFactory.ContinueWhenAll也是一个意思