• 线程线程杂谈(1)


    讨论的问题:

    网络编程中模型在所难免会遇到这样情况:在线程中需要不断的收取数据并进行处理,对于任何编程语言,如果不用事件、异步、委托等方式处理的,那就只能用查询方式了;如果线程查询中方式没有不阻塞,会出现什么情况?

    说明:不阻塞有以下两种含义:

            (1) 没有阻塞的意思是把阻塞函数设置成为了非阻塞;

            (2)线程中也没有加入延时操作函数进行阻塞;

    下面以C#的线程为例:

        Thread t = new Thread(new ThreadStart( mainloop));
        t.IsBackground = true;
        t.Start();

          private void mainloop()
            {
                while(true)
                {
               ;
                 }
                   // Thread.Sleep(100);
                }
            }

    这样程序就会造成电脑CPU使用率激增,对于单核电脑基本能达到100%;我的PC是4核的,使用立马增到41.9%;造成这样的原因就是程序在空转,由于没有阻塞处理,程序占用了太多的时间片;

    如果在循环中加入100ms延时的阻塞会出现什么情况呢:

    发现程序CPU的占用率基本就为0%了;

    最后:线程死循环+短时间阻塞或者不阻塞什么场景会使用?

             (1)不阻塞可以在嵌入式单板中使用,目前着手的项目中有这样程序,并且稳定运行;因为就一个应用程序,这样做也无可厚非;

             (2)如果在PC上使用的话,请加上1ms级别的延迟,这样就能把CPU使用率降低下来了;

    总结,如果不想使用这种架构,那么就要考虑事件模型了;

            

  • 相关阅读:
    一句话开启XP_CMDSHELL
    CF14B Young Photographer 题解
    sql 存储过程与函数区别
    sql索引
    分区表中毒,重装系统
    面试
    XML范例的应用(转载)
    数据结构题目
    网页加载速度的方法和技巧
    设计模式分类
  • 原文地址:https://www.cnblogs.com/cdma/p/4601488.html
Copyright © 2020-2023  润新知