关于多线程简单原理

相信大家经常听说 进程和线程 ,当然这东西出现必然有他的用处

什么是进程?

图书上就是进程,你会发现我的电脑运行多个进程

对于以前的单核电脑来说(它在某一时刻只能执行一个进程,为什么我们既能听歌,又能看电影呢,那是因为cpu在飞快的切换!)

那么对于多核当然是可以再同一时刻运行多个进程了

上面说了进程,还的补充一点,进程间的内存是相互独立的!

下面说下线程:

线程是进程的最少执行单元,这话说的有点专业,还是上个简单的图

说了这么多看代码!

复制代码
 class Program
    {
        
        static void Main(string[] args)
        {

            f1();
        }
        static void f1()
        {
            f2();
        }
        static void f2()
        {
            f3();
        }
        static void f3()
        {
            Console.WriteLine("M3..........");
        }
    }  
}
//这段代码明显是在一个单线程里面完成的!
复制代码

下面看一个图更能说明问题

 

下面看一个多线程的执行代码:

复制代码
  class Program
    {
        
        static void Main(string[] args)
        {
            //创建线程
            Thread thread = new Thread(run); //run 方法在 t线程中运行
            thread.Start();//这段代码执行瞬间结束 告诉系统分配新的栈内存给t线程
            
            //这段代码在主线程
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("main--->"+i);
            }
            //有了多线程 main方法结束只是主线程中没有方法栈帧
        }

        static void run()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine("run"+i);
            }
        }
}
下面看一下执行结果! 截图一部分,后面也是输出

从图可以看出 它并不是一直连续输出的,而main方法里的for结束后还在执行
可能你会想到,是创建了线程的效果,为什么会产生这种效果呢?
看下面图:


复制代码

 

 

以上是本人在工作,学习之余的一点总结,线程原理调用主要体现在这幅图里(开辟了新的线程栈内存!)

当然还有很多不足,勿ping 缺点欢迎指出!

 

 

 

posted @   KyrieYang  阅读(26113)  评论(7编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示