zoukankan      html  css  js  c++  java
  • 进程、线程、多线程

    1.什么是进程?

       进程是系统中正在运行的一个程序,程序一旦运行就是进程。

    进程可以看成程序执行的一个实例。进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等。

               一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间。线程与进程的一个主要区别是,统一进程内的一个主要区别是,同一进程内的多个线程会共享部分状态,多个线程可以读写同一块内存(一个进程无法直接访问另一进程的内存)。

    示例:任务管理器中可看,一个个应用都代表一个 进程

     

     2.什么是线程?

    线程是操作系统进行运算调度的最小单位。

    进程在执行任何一个 操作或者响应,都是由线程去完成的,进程包含线程,线程一定属于进程,进程和线程之间是一对多的关系

    3.什么是多线程?

    一个进程里面有多个执行流并发执行。比如一个人既可以某一段时间内即看电视有吃东西,每个动作类似于线程,在同一段时间内做不同的事,并且还可以进行信息共享。

    4.任何实现单线程、多线程?单线程跟多线程之间有什么区别?

    以下实现都基于C#进行实现。

    UI界面展示:

    计算耗时方法代码:

    public void DoSomething(int n)
            {
                var threadId = Thread.CurrentThread.ManagedThreadId;
    
                Console.WriteLine($"button1_Click{n} ==》线程ID:{threadId} ==》当前时间:{DateTime.Now.ToLongTimeString()} start......");
    
                var num = 0;
                for (int i = 0; i < 1_000_000_000; i++)
                {
                    num += i;
                }
                Console.WriteLine($"button1_Click{n} ==》线程ID:{threadId} ==》当前时间:{DateTime.Now.ToLongTimeString()} end......");
    
            }
    

      同步方法代码:

    //同步方法
            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 5; i++)
                {
                    this.DoSomething(i);//执行耗时方法
                }
            }
    

      异步多线程方法代码:

    //异步多线程方法
            private void button2_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < 5; i++)
                {
    int k = i; var task=Task.Run(() => { this.DoSomething(k); });//执行耗时方法
    
    
    } }

      同步方法跟异步多线程方法执行后效果对比:

    控制台数据结果:

    CPU占用资源结果:

    结果分析:

    从执行结果来看,总结几点

    1.同步比异步执行时间更长,同步只有一个线程参与计算(主线程),由于主线程参与计算,导致UI界面卡顿,计算完成后主线程闲置,UI界面不卡顿,

    异步执行时间短,界面不卡顿,主线程闲置,启用五个线程参与计算,效率高,但占用CPU资源较多。

    2.同步符合正常程序逻辑,有序执行,异步执行顺序是无序的,执行顺序是有CPU调度决定。

    3.从执行时间来看,单线程执行时间为16582ms,启用五个线程执行时间为3460ms,以正常思维来看,一个线程执行16582ms,五个线程执行应该是3316ms才对,并没有起到五倍的效率。

    原因有两点:1.资源是有限的 2.线程调度会有损耗

     

     

    5.总结

    同步单线程方式执行效率低,界面卡顿,用户体验性不太好,占用CPU资源少。

    异步多线程方式执行效率高,界面不卡顿,用户体验性较好,占用CUP资源多。

    有时候使用多线程并不是越多越好,应酌情使用。

  • 相关阅读:
    项目工程化之git提交规范以及 CHANGELOG生成
    移动端 弹窗-内容可滚动,背景不动
    项目readme文件目录生成工具 treer
    css animation动画
    【网络】从套接字到Web服务器
    【网络】图解HTTP-1
    【MySQL】搞懂ACID原则和事务隔离级别
    【MySQL】备份与恢复
    【MySQL】索引
    【Redis】主从复制原理
  • 原文地址:https://www.cnblogs.com/jiangxifanzhouyudu/p/10926402.html
Copyright © 2011-2022 走看看