博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程线程杂谈(1)
阅读量:6296 次
发布时间:2019-06-22

本文共 692 字,大约阅读时间需要 2 分钟。

 

讨论的问题:

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

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

        (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

你可能感兴趣的文章
DELL EqualLogic PS存储数据恢复全过程整理
查看>>
《Node.js入门经典》一2.3 安装模块
查看>>
《Java 开发从入门到精通》—— 2.5 技术解惑
查看>>
Linux 性能诊断 perf使用指南
查看>>
实操分享:看看小白我如何第一次搭建阿里云windows服务器(Tomcat+Mysql)
查看>>
Sphinx 配置文件说明
查看>>
数据结构实践——顺序表应用
查看>>
python2.7 之centos7 安装 pip, Scrapy
查看>>
机智云开源框架初始化顺序
查看>>
Spark修炼之道(进阶篇)——Spark入门到精通:第五节 Spark编程模型(二)
查看>>
一线架构师实践指南:云时代下双活零切换的七大关键点
查看>>
ART世界探险(19) - 优化编译器的编译流程
查看>>
玩转Edas应用部署
查看>>
music-音符与常用记号
查看>>
sql操作命令
查看>>
zip 数据压缩
查看>>
Python爬虫学习系列教程
查看>>
【数据库优化专题】MySQL视图优化(二)
查看>>
【转载】每个程序员都应该学习使用Python或Ruby
查看>>
PHP高级编程之守护进程,实现优雅重启
查看>>