并发与异步—创建、联合与休眠、阻塞
线程的共享状态:
在进程里,多线程共享同一个执行环境,特别是(内存),一个线程在后台获取数据,同时另一个线程显示所获得的数据,这些数据就是所谓的共享状态。
线程创建、联合与休眠:
class Program { static void Main(string[] args) { //创建线程 Thread t = new Thread(WriteY); t.Start(); //t.Join(TimeSpan.FromMilliseconds(5000)); for (int i = 0; i < 1000; i++) { Console.Write("X"); } Console.ReadKey(); } static void WriteY() { // Thread.Sleep(0); || Thread.Yield(); 会立马放弃时间片,自动将CPU交给同一处理器上运行的线程。提示: 它可以帮助开发者发现线程安全问题:如果在代码任意位置插入Thread.Yield()会破坏程序,那么代码肯定存在bug for (int i = 0; i < 1000; i++) { Console.Write("Y"); } } //单核处理器,系统会为每个线程分配时间片,模拟并发,(windows 一般为20毫秒)‘ //多核心或者多处理器是能够真正实现并行执行 //提示:线程被认为是优先占用它在执行过程与其他线程代码交叉执行的位置,这个术语通常可以解释出现的问题! }
线程阻塞:
线程阻塞是指线程由于特定原因暂停执行,如Sleeping或执行Join后等待另一个线程停止。阻塞的线程会立刻交出处理器时间片,然后从这时开始不再消耗处理器时间,直至阻塞条件结束。使用线程的ThreadState属性,可以测试线程的阻塞状态:
bool blocked = (someThread.ThreadState&ThreadState.WaitSleepJoin) != 0;
ThreadState是一个枚举量,它由三”层“二进制位数据组成。然而,这其中大多数是冗余和废弃的。可以用扩展方法限定枚举的值:
public static ThreadState Simplify(this ThreadState ts) { return ts & (ThreadState.Unstarted|ThreadState.WaitSleepJoin|ThreadState.Running|ThreadState.Stopped); }
每个人的前方都有一条路,幸福,不是第一步,也是通往未来的每一步,每条路上都有一段旅程正在发生,出发,不仅为了到达,是为遇见更美的风景,没有不可征服的挑战,曲折无非是过程不再平淡,没有不可到达的地方,让一起经过的成为梦中经历的,没有无法突破的界限,换一种方式又能从容前行,向前走吧,也许每一个人前方的路各不相同。但无论道路的长短,过程的起伏,都无法阻挡向前的决心,因为...始终相信进无止境是我们共同的信仰。...,进无止境!