线程线程杂谈(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使用率降低下来了;

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

        

原文地址:https://www.cnblogs.com/cdma/p/4601488.html