当前位置: 首页 > wzjs >正文

百度网站地图制作百度网络营销的概念

百度网站地图制作,百度网络营销的概念,网站里的动效怎么做,长沙网站建设哪个好目录 1.阻塞(Blocking) 2.阻塞 VS 轮询 3.线程状态 到目前为止,我们已经阐述了如何在线程上启动任务、配置线程以及实现双向数据传递。同时,我们也说明了局部变量是线程私有的,而引用可以通过共享字段在线程间传递以…

目录

1.阻塞(Blocking)

2.阻塞 VS 轮询

3.线程状态


        到目前为止,我们已经阐述了如何在线程上启动任务、配置线程以及实现双向数据传递。同时,我们也说明了局部变量是线程私有的,而引用可以通过共享字段在线程间传递以实现通信。

下一步的关键是同步机制:通过协调线程行为来获得可预测的结果。当多个线程访问同一数据时,同步显得尤为重要——这个领域看似简单却暗藏风险。

同步构造可分为四大类别:

  1. 简单阻塞方法
    这类方法通过等待其他线程结束或计时完成来实现同步。例如:SleepJoin 和 Task.Wait 都属于简单阻塞方法。

  2. 锁定构造
    用于限制同时执行某段代码或操作的线程数量。最常见的独占锁(如 lock/Monitor.Enter/Monitor.ExitMutex 和 SpinLock)仅允许一个线程进入,确保竞争线程访问共享数据时互不干扰。非独占锁包括信号量(Semaphore/SemaphoreSlim)和读写锁。

  3. 信号构造
    允许线程暂停运行直至接收到其他线程的通知,从而避免低效的轮询。常用信号机制有两种:事件等待句柄(event wait handles)和 Monitor 的 Wait/Pulse 方法。.NET Framework 4.0 新增了 CountdownEvent 和 Barrier 类。

  4. 非阻塞同步构造
    通过调用处理器原语来保护共享字段的访问。CLR 和 C# 提供的非阻塞构造包括:Thread.MemoryBarrierThread.VolatileReadThread.VolatileWritevolatile 关键字以及 Interlocked 类。

除最后一类外,阻塞机制在其他类别中均占核心地位。下面我们将简要探讨这一概念。

1.阻塞(Blocking)

        当线程因某些原因暂停执行时(例如通过 Sleep 进入休眠,或通过 Join/EndInvoke 等待其他线程结束),该线程即被视为阻塞状态。阻塞线程会立即释放其处理器时间片,此后在阻塞条件满足前不再消耗任何处理器资源。可通过线程的 ThreadState 属性检测阻塞状态:

bool blocked = (someThread.ThreadState & ThreadState.WaitSleepJoin) != 0;
(由于线程状态可能在检测与后续操作之间发生变化,此代码仅适用于诊断场景。)

当线程阻塞或解除阻塞时,操作系统会执行上下文切换。这将产生几微秒的开销。

线程会通过以下四种方式解除阻塞(当然,按电脑电源键不算!):

  1. 阻塞条件得到满足

  2. 操作超时(如果指定了超时时间)

  3. 通过Thread.Interrupt被中断

  4. 通过Thread.Abort被中止

需要注意的是,如果线程是通过(已弃用的)Suspend方法暂停执行的,则不会被判定为处于阻塞状态。

2.阻塞 VS 轮询

当线程需要暂停直到特定条件满足时,通常有两种实现方式:

  1. 阻塞等待(高效方式)
    通过信号和锁机制实现,线程会进入阻塞状态直到条件满足,此时操作系统会调度其他线程执行。

  2. 轮询等待(简单但低效)
    线程通过循环检测条件来实现等待,例如:

while (!proceed);  // 忙等待

while (DateTime.Now < nextStartTime); // 时间等待

性能考量:

  • 纯轮询会完全占用CPU资源,因为CLR和操作系统会认为线程正在进行重要计算

  • 这种方式的CPU利用率是100%,极其浪费系统资源

改进方案:
可以采用混合阻塞的方式:

while (!proceed) Thread.Sleep(10);  // 每次检查后休眠10ms

虽然不够优雅,但相比纯轮询能显著降低CPU占用率。不过需要注意共享变量(如proceed标志)的并发访问问题,正确的锁和信号量使用可以避免这些问题。

适用场景:
当预期条件能在极短时间内(如几微秒)满足时,短暂轮询可能更高效,因为它避免了上下文切换的开销和延迟。.NET框架为此提供了专门的工具类和方法,这些内容将在并行编程章节详细介绍。

这里小节一下:

  • 阻塞等待:适合大多数情况,资源利用率高

  • 纯轮询:简单但资源浪费严重

  • 混合模式:折中方案,需要处理并发问题

  • 微秒级等待:特殊场景下短暂轮询可能更优

3.线程状态

        您可以通过ThreadState属性查询线程的执行状态。该属性返回一个ThreadState类型的标志枚举,它以位运算方式组合了三个"层次"的数据。不过,大多数枚举值都是冗余的、未使用的或已废弃的。下图展示了其中一个"层次":

以下代码可将ThreadState精简为四个最常用的状态值:未启动(Unstarted)、运行中(Running)、等待休眠或加入(WaitSleepJoin)和已停止(Stopped):

public static ThreadState SimpleThreadState(ThreadState ts)
{return ts & (ThreadState.Unstarted |ThreadState.Running |ThreadState.WaitSleepJoin |ThreadState.Stopped);
}

ThreadState属性适用于诊断目的,但不适合用于同步控制,因为在检测线程状态和基于该状态执行操作之间,线程状态可能会发生变化。


本节完,下一节将开始介绍同步工具

http://www.dtcms.com/wzjs/216194.html

相关文章:

  • 北京海淀区网站建设抖音seo优化怎么做
  • 以网站做跳板入侵营销咨询公司经营范围
  • 不用网站做淘宝客百度推广费用多少钱
  • 广告公司网站策划苏州seo服务热线
  • 温州网站开发平台百度站长工具添加不了站点
  • h5效果展示网站如何提高自己在百度的排名
  • 中山网站建设公司哪个好aso推广平台
  • 佛山网站建设怎样做浏览器网址
  • 网站用户引导seo自媒体培训
  • 如何做介绍一门课程的网站客户关系管理
  • 交互式网站开发技术上海推广服务
  • 怎样做企业营销网站电商网站对比表格
  • 网站开发项目有哪些html网页制作网站
  • 国家建设部网站华为云速建站
  • 深圳南山网站建设站长工具whois查询
  • 中美军事最新消息汕头网站快速优化排名
  • PHP+MySQL网站开发全程实例搜索引擎营销的步骤
  • 网站建设营销方案宁波网站seo诊断工具
  • 提升网站排名百度网盘登录
  • 重庆网络安全公司关键字优化
  • 网站充值链接怎么做广东近期新闻
  • 怎样做网站建设方案友情链接英文
  • 商铺免费做的网站如何推销自己的产品
  • 宣城网站制作郑州seo外包服务
  • 定制网络零信任上海优化网站
  • 深圳网站建设技术微信信息流广告投放
  • 自己做的网站 kindle主流搜索引擎有哪些
  • 恩阳建设局网站seo公司赚钱吗
  • 南通营销型网站建设全国各城市感染高峰进度查询
  • 上虞网站建设文广网络百度网站收录提交