美文网首页.NET多线程
.NET多线程(一)基本认识

.NET多线程(一)基本认识

作者: 万州大牛 | 来源:发表于2017-01-20 23:53 被阅读0次

本节主要内容


线程定义


为什么使用多线程

例 1
界面上点击某个按钮后,需要执行一个非常耗时的操作,如果不使用多线程,就只能傻等操作返回。
使用多线程,点击按钮之后,开辟1个新线程后台去执行这个耗时操作,前台界面继续执行其他菜单目录,录入数据等。

例 2
有个操作,1个线程需要20分钟完成,现在的多核cpu,可以真正同一时刻运行多个线程。
假设是双核cpu,同一时刻运行2个线程,操作就只需要10分钟可以完成。


多线程优点

(1)提高应用程序执行效率。【例1】
(2)提高cpu利用率。【例2】

多线程缺点

(1)占用内存,耗费cpu时间进行跟踪。
(2)共享资源访问相互影响,程式代码控制难度大。

问自己
新开辟的线程,肯定需要内存吧?
多个线程之间需要切换吧?切换需要占用cpu来计算吧?
多个线程的执行顺序,是无法确定的,当他们都需要访问相同的变量、文件时,需要对这个变量、文件做同步处理吧?


线程的数量

理想的,线程数量 = cpu核心数量

(1)超线程
利用硬件指令,把1个物理cpu核心内部的2个逻辑内核,模拟成2个物理核心。
通俗点就是1个cpu变2个cpu了,这时候,同一时刻,就可以2个线程真正的同时运行。

(2)多核处理器
就是cpu本身,就有2个或多个物理核心(比如:双核,四核),硬件本身就是可以同一时刻跑2个或多个线程。

同一时刻,1个cpu核心只会让1个线程使用。如果有多个线程,那肯定需要切换,这个切换也是必要的,不然就会导致傻等的问题。这里,我们只要明白,一个时刻,1个cpu核心,只会让1个线程使用。


线程的执行顺序

多个线程,执行顺序,是无法确定的。

这个问题
主要是操作系统Windows是抢占式管理,谁抢到cpu,cpu就帮你干活。
不过cpu计算非常的快,这次没抢到cpu,那就等下次呗,操作系统Windows也不会让线程饿死的。


理解同一时刻

1个cpu核心,同一时刻,只会有一个线程运行。多核心cpu,超线程,同一时刻,可以真正同时运行多个线程。

我们通常认为的电脑同时运行多个程序,同时执行多个任务。
这个【同时】并不是真正意义的【同一时刻】。
多个程序,多个任务是否同一时刻运行,要看硬件cpu的处理能力。
cpu计算非常的快,多个线程轮询cpu执行各自的操作。

线程切换频率很快,我们的感觉是多个线程同时运行。
要想多个线程【同一时刻】运行,那就需要多个cpu核心。
比如,采用超线程,多核心处理器,同一时刻可以真正运行,2个线程,8个线程,16个线程等。


以上内容,仅仅代表个人理解,以及参考书资料的观点。
如果有错误,请及时指出,不要让错误的观点误导更多的人,感谢!

相关文章

  • .NET多线程(一)基本认识

    本节主要内容 线程定义 为什么使用多线程 例 1界面上点击某个按钮后,需要执行一个非常耗时的操作,如果不使用多线程...

  • Java并发专题【3】Java内存模型以及happens-bef

    JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有...

  • .Net 多线程

    CPU核心数量拥有成千上万的线程,一个线程负责执行一个任务,可分为原生线程和托管线程;【寄存器 < 逻辑核心 < ...

  • java内存模型以及happens-before规则

    1. JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编...

  • GCD多线程并发执行多任务并同步返回

    前面有写过一篇 .NET 使用WaitHandle开启并发多线程查询并同步返回 在.NET中有WaitHandle...

  • Metal绘制流程

    Metal的基本绘制流程、多线程渲染参考:Metal多线程渲染

  • Java网络知识汇总

    Java多线程https://blog.csdn.net/qq_35114086/article/details/...

  • Android知识点

    Android多线程安全:https://blog.csdn.net/SenchunHuang/article/d...

  • mysql.connector

    一、基本操作 二、多线程存取Mysql数据 创建表 (一)多线程存入数据 这是在一个表中多线程插入数据最好是多线程...

  • NSOperation

    iOS多线程--彻底学会多线程之『NSOperation』 一. 基本用法 如果不创建BlockOperation...

网友评论

    本文标题:.NET多线程(一)基本认识

    本文链接:https://www.haomeiwen.com/subject/hqjgbttx.html