‫欢迎回来｡
‫在本视频中, 我们将了解威胁池｡
‫因此, 我们将创建多个线程, 看看会发生什么｡
‫因此, 让我们先创建一个非常基本的线程, 我将删除这个完成源代码｡
‫因此, 我们在这里处于一个非常普通的线程｡
‫这是我们目前使用的通用线程｡
‫这里我们等待1/2, 例如, 它有一个线程号, 为了启动它,
‫我们当然需要在接近结束时调用start方法｡
‫所以现在这只是一个线程, 它将开始｡
‫所以没什么新鲜事｡
‫我们在那里已经做了很多次了｡
‫唯一的区别是,
‫现在我想使用线程池, 但在此之前, 我将使用一个可枚举的数字,
‫就像这样, 我将运行一个从0到100的范围, 现在列出每个条目, 我想做一些事情｡
‫所以我只需要运行特定的代码｡
‫所以这只是一行代码｡
‫在那里我想创造线程｡
‫所以它要做的是这个I枚举或者这个枚举, 实际上, 它要创建多个线程,
‫它要创建100个线程｡
‫所以我在这里用一个链接｡
‫所以使用系统链接来使用可枚举的, 它应该被称为range, 以E结尾｡
‫我们就这样了｡
‫这样就可以创建100个线程, 我们可以在控制台上看到所有这些线程｡
‫让我们从这个开始吧｡
‫就这样
‫正如你所看到的, 它开始线程, 它结束线程｡
‫而102是最后一个线程｡
‫如你所见, 它是从三开始的｡
‫从三开始, 六, 五, 以此类推｡
‫因此, 正如你所看到的, 这个顺序与我们所期望的非常不同｡
‫因此, 线程的ID与我们预期的顺序不同, 但它们开始和结束的速度可能有点太快了｡
‫让我们创建更多线程｡
‫假设有1000个线程, 如您所见, 它创建了大量线程, 但线程在其他线程启动之前就已结束｡
‫这个可枚举变量启动它们或者尽可能快地创建它们.
‫但正如你所见, 这需要一点时间｡
‫比如说大约100毫秒来创建一个线程, 它创建它们, 然后开始完成它们｡
‫因此, 在1/2之后, 它创建了6个线程, 然后才创建了5个线程｡
‫所以第一批就结束了｡
‫如您所见, 它会创建这些线程, 但效率并不高, 因为我们无法控制这些线程,
‫无法控制这么多的线程｡
‫这是线程的一个非常重要的方面, 在使用线程时, 您必须非常､ 非常小心､ 非常精确｡
‫你需要知道你想用这个线程做什么, 为什么它在那里, 以及通常如何处理线程中的所有东西｡
‫这只是一个线程的例子, 你可以创建多个线程, 它刚刚创建了1000个这样的线程｡
‫现在,
‫让我们来看看线程池, 因为线程池在使用线程方面稍有不同, 而且它们更安全一些, 因为它们不会创建1000个不需要的线程｡
‫它只具有当前所需的线程｡
‫因此, 让我们在这里创建一个线程池, 并将用户工作项QA方法排队以供执行｡
‫方法在线程池线程可用时执行, 因此只有当它可用时, 才会执行此方法,
‫并且它需要一个对象｡
‫所以这里有两个不同的｡
‫你可以看到回调函数和对象, 我会给予它一个类似于对象的“哦”｡
‫我只想把它命名为, 没什么特别的, 我将在线程池中执行什么.
‫我只需要给予我线程的ID或线程编号, 然后告诉我它的开始时间和结束时间｡
‫这就是我想对这个线程池做的所有事情｡
‫正如您在这里看到的, 我们没有专门创建线程, 我们没有在那里创建线程,
‫但线程池会为我们做这些｡
‫因此, 有大量的工作要做, 比如要处理1000个线程｡
‫如您所见, 它只创建特定数量的线程｡
‫正如你所看到的, 它几乎同时开始和结束线程｡
‫您还可以看到, 我的CPU上没有太多内核, 因为它只能同时处理特定数量的线程｡
‫因此, 线程池处理事情会更加顺畅, 正如您所看到的｡
‫当然, 要完成所有这1000个线程需要花费大量时间｡
‫但就像我说的, 如果你使用威胁, 你必须控制它们｡
‫所以不要随意使用威胁｡
‫当你在后台和前台做一些事情的时候, 你会使用威胁｡
‫因此, 在前景中通常是类似于UI的东西｡
‫因此, 当您使用WPF或使用Xamarin应用程序或使用Xamarin创建应用程序时,
‫所有在前端发生的事情都是由主线程完成的, 然后是UI线程,
‫然后是从互联网下载视频或下载数据, 或者从硬盘或SD卡访问数据,
‫等等｡
‫可能要花点时间｡
‫即使只有几毫秒, 或者不是几毫秒, 而是几毫秒,
‫这也是应该在后台完成的事情, 因为否则您的UI将被冻结, 因为它还没有准备好做什么,
‫因为线程都忙碌｡
‫好吧, 我会的
‫这就是关于创建线程池的内容｡
‫如果你有很多事情要做, 你可以使用线程池｡
‫因此, 在使用威胁池时, 需要考虑几件事｡
‫因此,
‫通常威胁池用于运行特定工作或执行特定工作或工作项, 它们会一直等到下一个线程准备就绪或一个线程完成, 然后再开始下一个威胁或开始下一个工作项｡
‫这就是威胁池的优势, 因为它们没有空闲时间或睡眠时间, 不会发生任何事情｡
‫几乎如此, 因为可能会有这样的情况, 即根本不需要用您的或由您的CPU来做任何事情｡
‫这是完全可以的, 因为否则它会对CPU非常沉重,
‫如果它必须运行所有的时间和做的东西所有的时间或沉重的工作｡
‫但通常, 这个威胁池只是简单地说, 好吧,
‫如果什么都没有, 或者如果有足够的空间让我运行线程或创建新线程, 我将这样做, 我将执行必须完成的工作｡
‫顺便说一下, 托管线程池中的线程是那里的后台线程｡
‫线程为后台, 属性为true｡
‫所以我们以前没有见过｡
‫但是如果我创建一个这样的线程, 那么让我从这里得到这个新线程｡
‫如果我想把它放在背景中, 我可以这样做｡
‫所以是以背景相等为真的例子｡
‫这就是我如何将此线程设置为您的背景｡
‫而在这个线程池队列中的队列中, 只有后台线程｡
‫需要考虑的另一点是威胁池何时重用威胁, 我们在这里看到了这一点｡
‫所以它会重复使用我们看到的威胁ID｡
‫好吧, 我知道了
‫这个威胁管理ID被多次重复使用｡
‫则威胁池不会清除威胁本地存储中的数据｡
‫因此, 当方法检查威胁本地存储时, 它找到的值可能是先前使用威胁池威胁时留下的｡
‫所以这是你必须考虑的｡
‫我将与您分享一个链接, 您可以了解有关威胁池的更多信息｡