浏览 197 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2024-10-12
学习地址1:https://pan.baidu.com/s/1mbc1JS8T_gpd3kfOeLgfBg 提取码:29ub 学习地址2:https://share.weiyun.com/VzlHodgi 密码:mn36h8 多线程是C#中一个重要的概念,多线程指的是在同一进程中同时运行多个线程的机制。多线程适用于需要提高系统并发性、吞吐量和响应速度的场景,可以充分利用多核处理器和系统资源,提高应用程序的性能和效率。 多线程常用场景 CPU 密集型任务. I/O 密集型任务. 并发请求处理. 大数据处理等. 一、什么是多线程 1、进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 2、线程 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 3、句柄 句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等。 4、多线程 (1)多线程概念 多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。 (2)多线程优点 可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。(牺牲空间计算资源,来换取时间) (3)多线程缺点 线程也是程序,所以线程运行需要占用计算机资源,线程越多占用资源也越多。(占内存多) 多线程需要协调和管理,所以需要CPU跟踪线程,消耗CPU资源。(占cpu多) 线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题。多线程存在资源共享问题) 线程太多会导致控制太复杂,最终可能造成很多Bug。(管理麻烦,容易产生bug) (4)为什么计算机可以多线程 程序运行需要计算机资源,操作系统就会去申请CPU来处理,CPU在执行动作的时候是分片执行的。 分片:把CPU的处理能力进行切分,操作系统在调度的时候,按照切片去处理不同的计算需求,按照规则分配切片计算资源,对于同一个计算机核心来讲,所有的运行都是串行的,但是因为分片的存在,感觉几个程序同时在向前推进。 (5)何时建议使用多线程 当主线程试图执行冗长的操作,但系统会卡界面,体验非常不好,这时候可以开辟一个新线程,来处理这项冗长的工作。 当请求别的数据库服务器、业务服务器等,可以开辟一个新线程,让主线程继续干别的事。 利用多线程拆分复杂运算,提高计算速度。 (6)何时不建议使用多线程 当单线程能很好解决,就不要为了使用多线程而用多线程。 同步机制 同步机制一般用于协调和控制多个线程之间顺序和互斥访问资源,确保线程按照特定的顺序执行,避免竞态条件和数据不一致的问题。同步机制也是处理线程安全问题的重要理论,它的主要原则包括空闲让进、忙则等待、有限等待、让权等待,这些都是操作系统课讲的东西,有些超过本文的范围了,所以就不详细说了。 同步机制的理论下有个重要定义:原语。原语指计算机系统中,不可再分割的操作或指令,是操作系统或者编程语言提供的最小粒度操作。我们说原语是原子性的,而原子性就是指执行过程中不可分割的。因此对多线程衍生出了原子操作。原子操作指在执行过程中不可中断的操作,要么完全执行要么完全不执行;在多线程条件下,原子操作一旦开始,就不会被切换线程等情况打断,能保证数据一致性和可靠性,避免竞态条件和数据竞争问题。比如,操作系统课的PV操作就是原子操作,在CPP的部分编译器中左自增也会被优化成原子操作。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |